Python:从文件中读取十六进制到列表中?

时间:2016-02-19 22:22:35

标签: python hex

有没有一种简单的方法可以在Python中将文件的十六进制数据读入列表,比如hex

所以hex = ['AA','CD','FF','0F']就是这样:

I am trying to replace a list element.

我不想读取字符串,然后拆分。这对于大文件来说是内存密集型的。

3 个答案:

答案 0 :(得分:9)

s = "Hello"
hex_list = ["{:02x}".format(ord(c)) for c in s]

输出

['48', '65', '6c', '6c', '6f']

只需将s更改为open(filename).read()即可。

with open('/path/to/some/file', 'r') as fp:
    hex_list = ["{:02x}".format(ord(c)) for c in fp.read()]

或者,如果您不想将整个列表一次性保存在内存中以用于大文件。

hex_list = ("{:02x}".format(ord(c)) for c in fp.read())

并获取值,继续调用

next(hex_list)

从生成器

获取所有剩余值
list(hex_list)

答案 1 :(得分:4)

使用Python 3,我们假设输入文件包含您显示的示例字节。例如,我们可以像这样创建它

>>> inp = bytes((170,12*16+13,255,15)) # i.e. b'\xaa\xcd\xff\x0f'
>>> with open(filename,'wb') as f:
...     f.write(inp)

现在,假设我们想要输入文件中每个字节的十六进制表示,那么以二进制模式打开文件会很好,而不会尝试将其内容解释为字符/字符串(或者我们可能会错误地查找错误{ {1}})

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xaa in position 0: invalid start byte

如果文件很大,我们可能希望一次读取一个字符或以块的形式读取。为此,我建议您阅读this Q&A

答案 2 :(得分:1)

请注意,要查看十六进制文件转储,大多数操作系统上都有可用的实用程序。如果您要做的只是十六进制转储文件,请考虑以下程序之一:

  • od(八进制转储,具有-x-t x选项)
  • hexdump
  • Windows下的
  • xd实用程序
  • 在线十六进制转储工具,例如this one