【发布时间】:2019-09-17 06:12:05
【问题描述】:
原始问题:我有一个StringIO 对象,如何将其转换为BytesIO?
更新:更普遍的问题是,如何在python3中将二进制(编码的)file-like对象转换为解码的file-like对象?
我得到的幼稚方法是:
import io
sio = io.StringIO('wello horld')
bio = io.BytesIO(sio.read().encode('utf8'))
print(bio.read()) # prints b'wello horld'
有没有更有效和优雅的方式来做到这一点?上面的代码只是将所有内容读入内存,对其进行编码,而不是分块流式传输数据。
例如,对于反向问题 (BytesIO -> StringIO),存在一个类 - io.TextIOWrapper 正是这样做的(参见 answer)
【问题讨论】:
-
“更优雅”是否包括在没有这样的批量复制的情况下自己实现它?
-
我希望有更好的东西,如果不是这样应该比天真的方法更好,所以是的。
-
请注意,在您要求 BytesIO -> StringIO 的原始问题和更新 StringIO -> BytesIO 中。示例继续 BytesIO -> StringIO。
标签: python python-3.x encoding io stream