0

最初に一時バッファを介して送信せずに、Pythonでファイルにバイナリデータを書き込みたいと思います。structモジュールをファイルで直接使用するにはどうすればよいですか?

4

1 に答える 1

3

これが、Python 3でバイナリデータをファイルに直接パックする方法です。唯一の欠点は、データを書き込む前にファイルの最大サイズを推測する必要があることです。truncate(推測が大きすぎる場合は、最後にへの追加の呼び出しを行うことができます。)

ここでは2つのことが起こっています。ファイルはメモリマップされており、そのメモリマップstructのにデータをパックするために使用されてmemoryviewいます。を使用memoryviewすると、Pythonバッファインターフェイスを使用してファイルに直接書き込むことができます。structpack_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)

また、への呼び出しを少なくする方がおそらく良いことに注意してpack_intoください。ここでループで呼び出すのは、説明のためだけです。

于 2012-06-29T20:57:33.617 に答える