如何在Python中高效地将二进制数据打包到文件中?
我希望用Python将二进制数据写入文件,而不首先通过临时缓冲区发送。如何在文件上直接使用如何在Python中高效地将二进制数据打包到文件中?,python,file-io,binary,Python,File Io,Binary,我希望用Python将二进制数据写入文件,而不首先通过临时缓冲区发送。如何在文件上直接使用struct模块?以下是我如何在Python 3下将二进制数据直接打包到文件中的。唯一的缺点是,在写入数据之前,需要猜测文件的最大大小。(如果猜测太大,则可以在末尾额外调用truncate。) 这里发生了两件事。文件正在进行内存映射,并且struct用于将数据打包到该内存映射的memoryview。通过使用内存视图,可以使用Python缓冲区接口直接写入文件struct的pack_to函数可以写入任何支持缓
struct
模块?以下是我如何在Python 3下将二进制数据直接打包到文件中的。唯一的缺点是,在写入数据之前,需要猜测文件的最大大小。(如果猜测太大,则可以在末尾额外调用truncate
。)
这里发生了两件事。文件正在进行内存映射,并且struct
用于将数据打包到该内存映射的memoryview
。通过使用内存视图
,可以使用Python缓冲区接口直接写入文件struct
的pack_to
函数可以写入任何支持缓冲区接口的内容。通过在套接字上使用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)
另外,请注意,对
pack_进行较少的调用可能会更好,在这里循环调用它只是为了说明目的。以下是我如何能够将二进制数据直接打包到Python 3下的文件中。唯一的缺点是,在写入数据之前,需要猜测文件的最大大小。(如果猜测太大,则可以在末尾额外调用truncate
。)
这里发生了两件事。文件正在进行内存映射,并且struct
用于将数据打包到该内存映射的memoryview
。通过使用内存视图
,可以使用Python缓冲区接口直接写入文件struct
的pack_to
函数可以写入任何支持缓冲区接口的内容。通过在套接字上使用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)
另外,请注意,对pack_进行较少的调用可能更好,在这里循环调用它只是为了说明目的