首页 > 解决方案 > 在 Python3 中统一替换 Python2 的 StringIO 是什么?

问题描述

文档表明这BytesIO是新的StringIO,因为它支持当前相对搜索

但是,这是不正确的。

BytesIO不能统一使用,TextIOWrappers因为它们是通过open()调用返回的。前者返回字节,后者在读取时返回文本对象。

TextIOWrapper(BytesIO(...))此外,它不会按预期工作,因为它不支持相对搜索。

那么StringIO在 python3 中替换 python2 的最佳构造是什么?

标签: pythonstringiobytesio

解决方案


没有单一的统一替换,因为字符串处理本身在 Python 3 中发生了变化。

Python 3 中内存中文本文件的类是io.StringIO. 与其他文本文件一样,它不支持当前相对搜索。虽然io.StringIO理论上可以支持有效的当前相对搜索,但为了与其他文本文件保持一致(并避免限制实现),它拒绝这样做。

Python 3 中内存二进制文件的类是io.BytesIO. 很有可能这是您应该使用的(如果是,那么您可能也应该以二进制模式打开磁盘文件)。

如果您真的需要 Python 2StringIO.StringIO.seek在 Python 3 中处理内存中文本文件的灵活性,那么最好的选择可能是编写自己的类。


推荐阅读