Kal*_*aaz 15 python io bytesio
因此,将BytesIO对象写入文件的快速方法是使用:
with open('myfile.ext', 'wb') as f:
f.write(myBytesIOObj.getvalue())
myBytesIOObj.close()
Run Code Online (Sandbox Code Playgroud)
但是,如果我想迭代myBytesIOObj而不是将其写入一个块,我将如何进行呢?我在使用Python 2.7.1.另外,如果BytesIO很大,那么迭代编写是否会更有效?
谢谢
tde*_*ney 19
shutil有一个实用程序,将有效地写入文件.它以块的形式复制,默认为16K.任何多个4K块都应该是一个很好的跨平台号码.我选择了131072而不是任意,因为在转到磁盘之前,文件真的被写入RAM中的操作系统缓存,而且块大小并不是那么大.
import shutil
myBytesIOObj.seek(0)
with open('myfile.ext', 'wb') as f:
shutil.copyfileobj(myBytesIOObj, f, length=131072)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,没有必要在最后关闭文件对象.当with语句编译时,文件会自动关闭.
Yur*_*rov 12
从 Python 3.2 开始,可以使用BytesIO.getbuffer()方法,如下所示:
from io import BytesIO
buf = BytesIO(b'test')
with open('path/to/file', 'wb') as f:
f.write(buf.getbuffer())
Run Code Online (Sandbox Code Playgroud)
这样它就不会复制缓冲区的内容,而是直接将其流式传输到打开的文件。
注意:StringIO缓冲区不支持该getbuffer()协议(从 Python 3.9 开始)。
在将缓冲区BytesIO流式传输到文件之前,您可能需要将其位置设置为开头:
buf.seek(0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7841 次 |
| 最近记录: |