【问题标题】:What uniformly replaces the StringIO of Python2 in Python3?在 Python3 中统一替换 Python2 的 StringIO 是什么?
【发布时间】:2020-04-30 22:24:30
【问题描述】:

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

但是,这是不正确的

BytesIO 不能与TextIOWrappers 统一使用,因为它们是由open() 调用返回的。前者返回 bytes 后者在读取时返回 text 对象。

TextIOWrapper(BytesIO(...)) 也不能按预期工作,因为同样,它不支持相对搜索。

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

【问题讨论】:

标签: python stringio bytesio


【解决方案1】:

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

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

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

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

【讨论】:

  • 我猜,Py2StringIO 将是 io 中的一个很好的候选者。然后它可以被迁移工具2to3 自动使用。字符串处理是迁移过程中的主要痛点,
  • @Frank-ReneSchäfer:这永远不会发生。即使这样的事情还不算太晚,这样的课程对于人们继续混淆字节和 unicode 来说太过分了。
  • 伤心。这使得从 2 到 3 的平滑过渡变得困难。
  • 更新:当前相对搜索的整个事情,即使是TextIOWrappers(...) 也变得一团糟。我决定完全重写我的代码以不使用当前相对搜索。然后,旧的新 StringIO 完成这项工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多