使用其他功能的数据

问题描述:

不知道我在做什么错在这里。主函数工作正常,但将数据追加/写入.txt文件函数不起作用。我不断收到“NameError:name'数据'未定义”。我猜这是一个范围问题?使用其他功能的数据

问题:如何运行主函数然后将输出写入文件?如何访问主函数的输出,以便我可以在其上运行其他函数?

请帮助和谢谢!

import sys, os 

print("\n-------------------------- String HexDump ------------------------------------\n") 


def main(): 
    try: 
     with open(sys.argv[1], 'rb') as file: 
      for line in range(0, os.path.getsize(sys.argv[1]), 60): 
       data = file.read(60) 
       data = str(data) 
       print(data) 
    except: 
     print('Usage: {} <filename>'.format(os.path.basename(sys.argv[0]))) 


str = lambda data: ''.join(31 < i < 127 and chr(i) or '.' for i in data) 


if __name__ == '__main__': 
    main() 



def HexStrFileDump(): 
    with open('HEXDUMPFILE2.txt','wb') as HexFile: 
     HexFile.write(data) 

HexStrFileDump() 
+0

数据对于模块应该是全局的。现在'data'是'main'函数中的一个局部变量。在函数的开始处使用'global'关键字将全局变量导入到函数中。 – Grimmy

+0

您可以读取全局变量,而无需使用'global'导入它们,但在为其分配值时无需导入它们。 – Grimmy

+0

请参阅https://*.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-c​​reated-them – Grimmy

要调用的顺序不正确,并与不存在的变量(data)和超出范围的所有功能。

如果你使用main()然后集中你所有的代码在这里和子功能,最好的做法是不要传播。

您的错误来自HexFile.write(data)的不当使用:数据是您的lambda的名称,而不是您的结果所在的位置。

这是一个正确的文件hexdumper我在5分钟内写了这样的回答:

import sys 

def main(): 
    print("\n-------------------------- String HexDump ------------------------------------\n") 
    try: 
     with open(sys.argv[1], 'rb') as file: 
      i = 0; clear = "" 
      for char in file.read(): 
       if char > 0x19 and char < 0x7f: 
        clear = clear + chr(char) 
       else: 
        clear = clear + "?" 
       if i % 4 == 0 and i != 0: 
        clear = clear + " " 
        sys.stdout.write(" ") 
       if i % 16 == 0 and i != 0: 
        sys.stdout.write(clear+"\n") 
        clear = "" 
        i = 0 
       sys.stdout.write("%02X" % char) 
       i += 1 
      if i % 16 != 0: 
       sys.stdout.write(" "+clear+"\n") 
    except: 
     raise 
     print('Usage: {} <filename>'.format(os.path.basename(sys.argv[0]))) 


if __name__ == '__main__': 
    main() 
+0

海事组织这并没有做太多的解释为什么提问者看到他们得到的错误。 –

+0

感谢您的反馈,我试图更加具体地讨论他的代码中数据的不当使用。 – Fabien

你真的应该已经张贴堆栈跟踪,所以我们可以看到那里的错误是从哪里来的,但你是幸运的因为这个程序中只有一个地方会导致你描述的错误。

def HexStrFileDump(): 
    with open('HEXDUMPFILE2.txt','wb') as HexFile: 
     HexFile.write(data) 
        ^

在代码中的那一点,未定义变量data。它必须在函数的前面或模块级别赋予它一些值,但是你没有这样做。

你有data变量main(),但该变量只存在内部main(),你也有你打电话str的lambda函数内部不同data变量,但再次,该变量只存在该函数内部。就HexStrFileDump()中的代码而言,其他data变量不存在,这就是为什么它抱怨data没有被定义。

+0

好吧,这就是我所在的地方。我在主要功能中添加了“全局数据”和“返回数据”。现在,当我运行它时,它会写入文件,但是它只写入第一行数据。我一直无法将所有内容写入文件。对我而言,现在看来我现在可以从全局变量中获取数据了,还是我仍然错了?原谅我,我仍在学习。 @大卫Z – Dpsmurphy