2016-08-20 69 views
6

因此,一個快速的方法來寫一個BytesIO對象到一個文件將只使用:寫BytesIO對象到一個文件中,「有效」

with open('myfile.ext', 'wb') as f: 
    f.write(myBytesIOObj.getvalue()) 
myBytesIOObj.close() 

但是,如果我想遍歷myBytesIOObj爲反對將它寫入一個大塊,我該怎麼辦呢?我在Python 2.7.1上。另外,如果BytesIO非常龐大,它是否會成爲一種通過迭代更有效的書寫方式?

感謝

回答

6

shutil有一個實用工具,將有效地寫入文件。它以大塊形式複製,默認爲16K。任何4K塊的倍數都應該是一個很好的跨平臺號碼。我相當隨意地選擇了131072,因爲在進入磁盤之前,真正的文件被寫入到RAM中的OS緩存中,並且塊大小並不是什麼大問題。

import shutil 

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

btw,沒有必要在最後關閉文件對象。當with語句complietes時,該文件會自動關閉。

+0

太棒了。非常感謝。這工作完美。是的,我不會打擾我的文件指針。但是,我想要關閉的字節/字符串IO指針,實際上是放棄它並讓它進入垃圾回收器。 – Kalabaaz