在Python 2.6+和3中编写二进制文件

时间:2011-12-10 21:45:21

标签: python binary io python-3.x

我正在编写一个需要编写二进制文件的程序。 In包含字符串(键值对)和数字数据(可以是little-endian或big-endian)的标题,我正在寻找一种编写在Python 2.6+和Python 3.2+中运行不变的程序的方法。

有人可以提出一些最佳做法吗?另外,在不使用struct.pack的程序逻辑混乱的情况下处理字节序的正确方法是什么。我应该继承BufferedWriter

提前致谢。

3 个答案:

答案 0 :(得分:1)

创建二进制数据后,只需将其写入以二进制模式打开的文件即可。这里的所有都是它的。那里没有Python 2和3之间的兼容性问题。

对BufferedWriter进行子类化是完全不必要的。

如何创建数据是一个不同的问题,但在那里我没有看到任何明显的不兼容问题。

答案 1 :(得分:0)

目前尚不清楚您是否已经拥有需要匹配的预定义二进制文件格式,但如果没有,您只是尝试以多种编程语言(以及多种语言)读取的方式序列化您的数据结构您可以在Protocol Buffers

查看多个平台上的Python版本

答案 2 :(得分:0)

您可以使用os.open + os.write + os.close。但是,这些需要循环以获得可靠性。

我使用http://stromberg.dnsalias.org/~strombrg/bufsock.html(我写过它,我的前雇主允许我开源)来实现这一点,以便在一个重复数据删除备份程序中实现这一点,该程序可以执行大量二进制I / O.即使您使用信号,这样做也不需要循环。不要让“bufsock”这个名字欺骗你 - 它对文件I / O也有好处。

顺便说一句,以长期依赖的方式写东西通常是长期的错误。如果你不满足于内置的Python工具(我并不总是,EG,一旦我需要一个3字节的整数类型),使用divmod 256拆分你的数字是可能的更好。另一个选择是使用{{3}获取可以终止的字符串。