我想将二进制数据写入Python中的文件,而不是先通过临时缓冲区发送它。如何直接在文件中使用struct
模块?
答案 0 :(得分:3)
以下是我能够在Python 3下将二进制数据直接打包到文件中的方法。唯一的缺点是在写入数据之前需要猜测文件的最大大小。 (如果猜测太大,可以在最后调用truncate
。)
这里发生了两件事。该文件正在进行内存映射,struct
用于将数据打包到该内存映射的memoryview
中。通过使用memoryview
,可以使用Python缓冲区接口直接写入文件。 struct
的{{1}}函数可以写入任何支持缓冲区接口的函数。也可以通过在套接字上使用pack_into
将二进制数据直接写入套接字来使用此技术。
memoryview
另外,请注意,减少对import struct
import mmap
with open('test.bin', 'wb') as f:
f.truncate(100)
with open('test.bin', 'r+b') as f:
m = mmap.mmap(f.fileno(), 0)
mv = memoryview(m)
for ind in range(25):
struct.pack_into('>l', mv, ind * 4, ind)
的调用可能会更好,而在此循环调用它只是为了说明目的。