Запись объекта BytesIO в файл, "эффективно"

таким образом, быстрый способ написать объект BytesIO в файл будет просто использовать:

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

однако, если бы я хотел перебрать myBytesIOObj, а не писать его одним куском, как бы я это сделал? Я на Python 2.7.1. Кроме того, если BytesIO огромен, будет ли это более эффективным способом написания итерацией?

спасибо

1 ответов


shutil имеет утилиту, которая будет эффективно записывать файл. Он копирует кусками, по умолчанию 16K. Любое несколько блоков 4K должно быть хорошим кросс-платформенным номером. Я выбрал 131072 довольно произвольно, потому что на самом деле файл записывается в кэш ОС в ОЗУ, прежде чем перейти на диск, и размер куска не так уж велик.

import shutil

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

кстати, не было необходимости закрывать файловые объекты в конце. Файл закрывается автоматически, когда оператор with complietes.