使用其他功能的数据
不知道我在做什么错在这里。主函数工作正常,但将数据追加/写入.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()
要调用的顺序不正确,并与不存在的变量(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()
海事组织这并没有做太多的解释为什么提问者看到他们得到的错误。 –
感谢您的反馈,我试图更加具体地讨论他的代码中数据的不当使用。 – Fabien
你真的应该已经张贴堆栈跟踪,所以我们可以看到那里的错误是从哪里来的,但你是幸运的因为这个程序中只有一个地方会导致你描述的错误。
def HexStrFileDump():
with open('HEXDUMPFILE2.txt','wb') as HexFile:
HexFile.write(data)
^
在代码中的那一点,未定义变量data
。它必须在函数的前面或模块级别赋予它一些值,但是你没有这样做。
你有data
变量main()
,但该变量只存在内部main()
,你也有你打电话str
的lambda函数内部不同data
变量,但再次,该变量只存在该函数内部。就HexStrFileDump()
中的代码而言,其他data
变量不存在,这就是为什么它抱怨data
没有被定义。
好吧,这就是我所在的地方。我在主要功能中添加了“全局数据”和“返回数据”。现在,当我运行它时,它会写入文件,但是它只写入第一行数据。我一直无法将所有内容写入文件。对我而言,现在看来我现在可以从全局变量中获取数据了,还是我仍然错了?原谅我,我仍在学习。 @大卫Z – Dpsmurphy
数据对于模块应该是全局的。现在'data'是'main'函数中的一个局部变量。在函数的开始处使用'global'关键字将全局变量导入到函数中。 – Grimmy
您可以读取全局变量,而无需使用'global'导入它们,但在为其分配值时无需导入它们。 – Grimmy
请参阅https://*.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-created-them – Grimmy