在Python3中,是什么统一地替代了Python2的StringIO?
文档建议在Python3中,是什么统一地替代了Python2的StringIO?,python,stringio,bytesio,Python,Stringio,Bytesio,文档建议BytesIO是新的StringIO,因为它支持当前相对搜索 但是,这是不正确的 BytesIO不能与TextIOWrappers统一使用,因为它们是通过open()调用返回的。前者返回字节,后者在读取时返回文本对象 TextIOWrapper(BytesIO(…)也不能按预期工作,因为它同样不支持相对搜索 那么,在python3中替换python2StringIO的最佳构造是什么呢?在python3中,字符串处理本身发生了变化,因此没有统一的替换 Python 3中内存中文本文件的类是
BytesIO
是新的StringIO
,因为它支持当前相对搜索
但是,这是不正确的
BytesIO
不能与TextIOWrappers
统一使用,因为它们是通过open()
调用返回的。前者返回字节,后者在读取时返回文本对象
TextIOWrapper(BytesIO(…)
也不能按预期工作,因为它同样不支持相对搜索
那么,在python3中替换python2
StringIO
的最佳构造是什么呢?在python3中,字符串处理本身发生了变化,因此没有统一的替换
Python 3中内存中文本文件的类是io.StringIO
。与其他文本文件一样,它不支持当前相对搜索。虽然理论上,io.StringIO
可以支持高效的当前相对搜索,但为了与其他文本文件保持一致(并避免限制实现),它拒绝这样做
Python 3中内存中二进制文件的类是io.BytesIO
。这很有可能是您应该使用的(如果是,那么您可能也应该以二进制模式打开磁盘文件)
如果您确实需要Python2的
StringIO.StringIO.seek
处理Python3中内存中的文本文件的灵活性,那么最好的办法可能是编写您自己的类。是否尝试io.StringIO
?我想,一个Py2StringIO
将是io
中的类的一个很好的候选者。然后,它可以由迁移工具2to3
自动使用。字符串处理是迁移过程中的主要痛苦,@Frank ReneSchäfer:这永远不会发生。即使这样做还不算太晚,这样一个类也会让人们不断混淆字节和unicode.Sad。这使得从2到3的平稳过渡变得困难。更新:cur-relative-seeking的整个过程,即使使用TextIOWrappers(…)
也会变得混乱。我决定完全重写代码,不使用cur。然后,好的新旧StringIO
完成了这项工作。