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.