Python 使用其他职能部门的数据
我不知道我做错了什么。main函数工作正常,但将数据追加/写入.txt文件函数不起作用。我不断得到“名称错误:名称‘数据’未定义”。我猜这是个范围问题 问题:如何运行main函数,然后将输出写入文件?如何访问主函数的输出,以便在其上运行其他函数 请帮忙,谢谢你Python 使用其他职能部门的数据,python,function,scope,nameerror,hexdump,Python,Function,Scope,Nameerror,Hexdump,我不知道我做错了什么。main函数工作正常,但将数据追加/写入.txt文件函数不起作用。我不断得到“名称错误:名称‘数据’未定义”。我猜这是个范围问题 问题:如何运行main函数,然后将输出写入文件?如何访问主函数的输出,以便在其上运行其他函数 请帮忙,谢谢你 import sys, os print("\n-------------------------- String HexDump ------------------------------------\n") def 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()
导入系统,操作系统
打印(“\n------------------------------------字符串hextdump--------------------------------------------\n”)
def main():
尝试:
打开(sys.argv[1],“rb”)作为文件:
对于范围(0,os.path.getsize(sys.argv[1]),60)中的行:
data=file.read(60)
数据=str(数据)
打印(数据)
除:
print('Usage:{}.format(os.path.basename(sys.argv[0]))
str=lambda数据:“”。连接(数据中的i为31您正在以不正确的顺序调用所有函数,并且使用不存在(数据)且超出范围的变量
如果您使用main()
,则将所有代码集中在此处和子函数中,最佳做法是不要四处传播
错误源于不正确使用HexFile.write(data)
:data是lambda的名称,而不是结果所在的位置
下面是我在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()
导入系统
def main():
打印(“\n------------------------------------字符串hextdump--------------------------------------------\n”)
尝试:
打开(sys.argv[1],“rb”)作为文件:
i=0;clear=“”
对于file.read()中的字符:
如果char>0x19且char<0x7f:
清除=清除+chr(字符)
其他:
清除=清除+“?”
如果i%4==0且i!=0:
清除=清除+“”
sys.stdout.write(“”)
如果i%16==0且i!=0:
系统标准输出写入(清除+“\n”)
clear=“”
i=0
sys.stdout.write(“%02X”%char)
i+=1
如果我是%16!=0:
sys.stdout.write(“+clear+”\n”)
除:
提升
print('Usage:{}.format(os.path.basename(sys.argv[0]))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
您真的应该发布堆栈跟踪,这样我们就可以看到错误的来源,但您很幸运,在这个程序中只有一个地方会导致您描述的错误
def HexStrFileDump():
with open('HEXDUMPFILE2.txt','wb') as HexFile:
HexFile.write(data)
^
在代码中的该点,未定义变量data
。它必须在函数之前或在模块级别为其分配一些值,但您尚未这样做
在
main()
中有一个data
变量,但该变量仅存在于main()
中,在调用str
的lambda函数中也有一个不同的data
变量,但同样,该变量仅存在于该函数中。就HexStrFileDump()
中的代码而言,其他数据
变量不存在,这就是为什么它抱怨数据
没有定义。数据
应该是模块的全局变量。现在,data
是main
函数中的一个局部变量。使用函数开头的global
关键字将全局变量导入函数。您可以读取全局变量,而无需使用global
,但在为其赋值时则不能。请参阅,您应该从main()返回“data”并将其传递给HexStrFileDump()。使用全局变量是一个不好的选择。在我看来,这并不能很好地解释询问者为什么会看到他们收到的错误。感谢您的反馈,我试图更具体地说明在他的代码中不正确地使用数据。好的,这就是我的观点。我在主函数中添加了“全局数据”和“返回数据”。现在,当我运行它时,它确实会写入文件,但是,它只写入第一行数据。我没能把所有的东西都写进这个文件。对我来说,似乎我现在可以访问添加的全局变量的数据,还是我仍然错了?原谅我,我还在学习@大卫Z