したがって、BytesIOオブジェクトをファイルに書き込む簡単な方法は、以下を使用することです。
with open('myfile.ext', 'wb') as f:
f.write(myBytesIOObj.getvalue())
myBytesIOObj.close()
ただし、1つのチャンクに書き込むのではなく、myBytesIOObjを反復処理したい場合は、どうすればよいですか?私はPython 2.7.1を使用しています。また、BytesIOが巨大である場合、それは反復による書き込みのより効率的な方法でしょうか?
ありがとう
shutil
には、ファイルを効率的に書き込むユーティリティがあります。チャンクでコピーし、デフォルトは16Kです。 4Kチャンクの倍数は、適切なクロスプラットフォーム番号である必要があります。実際にはファイルはOSキャッシュのRAMに書き込まれてからディスクに移動するため、チャンクサイズはそれほど大きな問題ではないため、131072を任意に選択しました。
import shutil
myBytesIOObj.seek(0)
with open('myfile.ext', 'wb') as f:
shutil.copyfileobj(myBytesIOObj, f, length=131072)
ところで、最後にファイルオブジェクトを閉じる必要はありませんでした。 with
はスコープを定義し、ファイルオブジェクトはそのスコープ内で定義されます。したがって、ファイルハンドルは、with
ブロックの終了時に自動的に閉じられます。