如何在Python中高效地将二进制数据打包到文件中?

如何在Python中高效地将二进制数据打包到文件中?,python,file-io,binary,Python,File Io,Binary,我希望用Python将二进制数据写入文件,而不首先通过临时缓冲区发送。如何在文件上直接使用struct模块?以下是我如何在Python 3下将二进制数据直接打包到文件中的。唯一的缺点是,在写入数据之前,需要猜测文件的最大大小。(如果猜测太大,则可以在末尾额外调用truncate。) 这里发生了两件事。文件正在进行内存映射,并且struct用于将数据打包到该内存映射的memoryview。通过使用内存视图,可以使用Python缓冲区接口直接写入文件struct的pack_to函数可以写入任何支持缓

我希望用Python将二进制数据写入文件,而不首先通过临时缓冲区发送。如何在文件上直接使用
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_进行较少的调用可能更好,在这里循环调用它只是为了说明目的