使用其他功能的数据

时间:2017-07-15 06:12:00

标签: python function scope nameerror hexdump

不确定我在这里做错了什么。主函数工作正常,但将数据附加/写入.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()

2 个答案:

答案 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没有被定义。