最初に一時バッファを介して送信せずに、Pythonでファイルにバイナリデータを書き込みたいと思います。struct
モジュールをファイルで直接使用するにはどうすればよいですか?
質問する
761 次
1 に答える
3
これが、Python 3でバイナリデータをファイルに直接パックする方法です。唯一の欠点は、データを書き込む前にファイルの最大サイズを推測する必要があることです。truncate
(推測が大きすぎる場合は、最後にへの追加の呼び出しを行うことができます。)
ここでは2つのことが起こっています。ファイルはメモリマップされており、そのメモリマップstruct
のにデータをパックするために使用されてmemoryview
います。を使用memoryview
すると、Pythonバッファインターフェイスを使用してファイルに直接書き込むことができます。struct
の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)
また、への呼び出しを少なくする方がおそらく良いことに注意してpack_into
ください。ここでループで呼び出すのは、説明のためだけです。
于 2012-06-29T20:57:33.617 に答える