Python3中Python2的StringIO用什么统一替换?
What uniformly replaces the StringIO of Python2 in Python3?
文档表明 BytesIO
是新的 StringIO
,因为它支持 current-relative seeks。
但是,这是不正确的。
BytesIO
不能与 TextIOWrappers
统一使用,因为它们由 open()
调用返回。读取时前者returnsbytes后者returnstext对象。
TextIOWrapper(BytesIO(...))
也没有按预期工作,因为它不支持相对查找。
那么替换 python3 中的 python2 StringIO
的最佳结构是什么?
没有单一的统一替换,因为字符串处理本身在 Python 3.
中发生了变化
Python 3 中内存中文本文件的 class 是 io.StringIO
。与其他文本文件一样,它不支持当前相对搜索。虽然 io.StringIO
理论上可以支持有效的当前相对搜索,但为了与其他文本文件保持一致(并避免限制实现),它拒绝这样做。
Python 3 中内存中二进制文件的 class 是 io.BytesIO
。这很有可能是您应该使用的(如果是,那么您也应该以二进制模式打开磁盘文件)。
如果您真的需要 Python 2 的 StringIO.StringIO.seek
在 Python 3 中处理内存中文本文件的灵活性,您最好的选择可能是编写自己的 class.
文档表明 BytesIO
是新的 StringIO
,因为它支持 current-relative seeks。
但是,这是不正确的。
BytesIO
不能与 TextIOWrappers
统一使用,因为它们由 open()
调用返回。读取时前者returnsbytes后者returnstext对象。
TextIOWrapper(BytesIO(...))
也没有按预期工作,因为它不支持相对查找。
那么替换 python3 中的 python2 StringIO
的最佳结构是什么?
没有单一的统一替换,因为字符串处理本身在 Python 3.
中发生了变化Python 3 中内存中文本文件的 class 是 io.StringIO
。与其他文本文件一样,它不支持当前相对搜索。虽然 io.StringIO
理论上可以支持有效的当前相对搜索,但为了与其他文本文件保持一致(并避免限制实现),它拒绝这样做。
Python 3 中内存中二进制文件的 class 是 io.BytesIO
。这很有可能是您应该使用的(如果是,那么您也应该以二进制模式打开磁盘文件)。
如果您真的需要 Python 2 的 StringIO.StringIO.seek
在 Python 3 中处理内存中文本文件的灵活性,您最好的选择可能是编写自己的 class.