我想将二进制数据写入 Python 中的文件,而不先通过临时缓冲区发送。如何struct
直接在文件上使用模块?
问问题
761 次
1 回答
3
这是我在 Python 3 下如何将二进制数据直接打包到文件中的方法。唯一的缺点是您需要在写入数据之前猜测文件的最大大小。truncate
(如果猜测太大,可以在最后进行额外的调用。)
这里发生了两件事。该文件正在被内存映射,struct
并被用于将数据打包到memoryview
该内存映射的一个。通过使用 a memoryview
,可以使用 Python 缓冲区接口直接写入文件。struct
的pack_into
函数可以写入任何支持缓冲区接口的东西。也可以通过memoryview
在套接字上使用 a 将二进制数据直接写入套接字来使用此技术。
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)
另外,请注意,对 进行更少的调用可能会更好,pack_into
此处在循环中调用它仅用于说明目的。
于 2012-06-29T20:57:33.617 回答