Запись объекта 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.