Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3中,是什么统一地替代了Python2的StringIO?_Python_Stringio_Bytesio - Fatal编程技术网

在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
完成了这项工作。