不确定我在这里做错了什么。主函数工作正常,但将数据附加/写入.txt文件函数不起作用。我一直在" NameError:name' data'未定义"。我猜它是一个范围问题?
问题:如何运行main函数然后将输出写入文件?如何访问main函数的输出以便我可以在其上运行其他函数?
请帮助,谢谢!!
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 :(得分:0)
您正在以不正确的顺序调用所有函数,并使用不存在的变量(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()
答案 1 :(得分:0)
你真的应该发布堆栈跟踪,这样我们才能看到错误的来源,但是你很幸运,这个程序中只有一个地方可能导致你所描述的错误。
def HexStrFileDump():
with open('HEXDUMPFILE2.txt','wb') as HexFile:
HexFile.write(data)
^
在代码中的那一点,未定义变量data
。它必须在函数的早期或模块级别为它分配一些值,但是你还没有这样做。
data
中有一个main()
变量,但该变量只存在于main()
内,并且您在lambda函数中也有一个不同的data
变量str
,但同样,该变量仅存在于该函数中。就HexStrFileDump()
中的代码而言,其他data
变量不存在,这就是为什么它抱怨data
没有被定义。