用于实现二进制文件格式的Python模块?
我经常需要写代码来处理一些二进制文件格式,但这些格式没有现成的工具可以用。我在寻找一种简单的方法来实现这些结构化二进制格式的读写功能——理想情况下,我希望能用某种简单的声明式格式来创建读取器。
我发现了一个叫做 Construct 的模块,它可以工作,但似乎作者已经基本不再维护了。我想知道有没有其他人用过的替代方案。
2 个回答
4
你可以看看这个叫做 Hachoir 的东西。
6
我个人会使用bitstring这个模块,不过我可能有点偏见,因为我是它的作者。在手册中有一些简单的代码示例,教你如何读取和写入二进制格式。
下面是通过二进制格式创建数据的一种方法:
fmt = 'sequence_header_code,
uint:12=horizontal_size_value,
uint:12=vertical_size_value,
uint:4=aspect_ratio_information,
...
'
d = {'sequence_header_code': '0x000001b3',
'horizontal_size_value': 352,
'vertical_size_value': 288,
'aspect_ratio_information': 1,
...
}
s = bitstring.pack(fmt, **d)
而这是之后解析数据的一种方法:
>>> s.unpack('bytes:4, 2*uint:12, uint:4')
['\x00\x00\x01\xb3', 352, 288, 1]