用于实现二进制文件格式的Python模块?

7 投票
2 回答
998 浏览
提问于 2025-04-16 12:09

我经常需要写代码来处理一些二进制文件格式,但这些格式没有现成的工具可以用。我在寻找一种简单的方法来实现这些结构化二进制格式的读写功能——理想情况下,我希望能用某种简单的声明式格式来创建读取器。

我发现了一个叫做 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]

撰写回答