我正在编写一个需要编写二进制文件的程序。 In包含字符串(键值对)和数字数据(可以是little-endian或big-endian)的标题,我正在寻找一种编写在Python 2.6+和Python 3.2+中运行不变的程序的方法。
有人可以提出一些最佳做法吗?另外,在不使用struct.pack
的程序逻辑混乱的情况下处理字节序的正确方法是什么。我应该继承BufferedWriter
?
提前致谢。
答案 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}获取可以终止的字符串。