Python:查看Hex中的所有文件

时间:2010-05-24 00:51:52

标签: python hex

我正在编写一个python脚本,它查看常见的计算机文件并检查它们是否有类似的字节,单词,双字。虽然我需要/想要查看Hex中的文件,但是ande似乎无法让python在python中打开一个简单的文件。我已经尝试使用hexc作为编码的codecs.open,但是当我操作文件描述符时它总是吐回来

      File "main.py", line 41, in <module>
    main()
  File "main.py", line 38, in main
    process_file(sys.argv[1])
  File "main.py", line 27, in process_file
    seeker(line.rstrip("\n"))
  File "main.py", line 15, in seeker
    for unit in f.read(2):
  File "/usr/lib/python2.6/codecs.py", line 666, in read
    return self.reader.read(size)
  File "/usr/lib/python2.6/codecs.py", line 472, in read
    newchars, decodedbytes = self.decode(data, self.errors)
  File "/usr/lib/python2.6/encodings/hex_codec.py", line 50, in decode
    return hex_decode(input,errors)
  File "/usr/lib/python2.6/encodings/hex_codec.py", line 42, in hex_decode
    output = binascii.a2b_hex(input)
TypeError: Non-hexadecimal digit found





def seeker(_file):
 f = codecs.open(_file, "rb", "hex")
 for LINE in f.read():
      print LINE
 f.close()

我真的只是想查看文件,并对它们进行操作,就好像它是在像xxd这样的十六进制编辑器中。也可以一次以一个字的增量读取文件。

不,这不是功课。

3 个答案:

答案 0 :(得分:4)

codecs.open(_file, "rb", "hex")正在尝试将文件的内容解码为十六进制,这就是为什么它失败了。

考虑到你的另一个“一次一个字”目标(我假设你的意思是“计算机字”,即32位?),你最好将打开的文件封装到你自己的类中。 E.g:

class HexFile(object):
    def __init__(self, fp, wordsize=4):
        self.fp = fp
        self.ws = wordsize
    def __iter__(self):
        while True:
            data = self.fp.read(self.ws)
            if not data: break
            yield data.encode('hex')

加上你会发现有用的其他任何实用方法,当然。

答案 1 :(得分:1)

您可以通过将整数参数传递给read来读取一定数量的字节:

32bits = file.read(4)

您可以使用seek

在文件中搜索某个位置
file.seek(100) # Seeks to byte 100

答案 2 :(得分:1)

如果这会更清楚......: def hexfile(file_path):     FP =开放(FILE_PATH)     而真:         data = fp.read(4)         如果没有数据:休息         print data.encode('hex')

file_path类似于“C:/somedir/filename.ext” 它很好的方法顺便说一下它对我来说很好用。 :)