2016-08-20 7 views
6

「効率的」、ファイルにだけ使用するようになり、ファイルへのBytesIOオブジェクトを記述する簡単な方法をBytesIOオブジェクトを書きますそれを1つのチャンクに書き込むのではなく、どうすればよいでしょうか?私はPython 2.7.1を使っています。また、BytesIOが巨大であれば、より効率的な方法で繰り返し書くことができますか?だから

おかげ

答えて

6

shutilは効率的にファイルを書き込みます有用性を有します。チャンクでコピーし、デフォルトは16Kです。 4Kチャンクの倍数は、良いクロスプラットフォーム数でなければなりません。実際にファイルがディスクに入る前にRAMのOSキャッシュに書き込まれ、チャンクサイズがそれほど大きくないので、私は131072をむしろ任意に選択しました。

import shutil 

myBytesIOObj.seek(0) 
with open('myfile.ext', 'wb') as f: 
    shutil.copyfileobj(myBytesIOObj, f, length=131072) 

btwのように、最後にファイルオブジェクトを閉じる必要はありませんでした。この文は、with文が一致すると自動的に閉じられます。

+0

恐ろしいです。本当にありがとう。これは完全に機能します。そして、はい、私はファイルポインタを閉じるのは苦労しません。しかし、私のバイト/文字列IOポインタは、私は実際には閉じて、それを破棄してガベージコレクタに移動させたい。 – Kalabaaz