StringIO 是我们在从文本中读取 pandas 数据帧时使用的类文件字符串缓冲区对象,例如“如何从字符串创建 Pandas 数据帧?”
我们应该将这两个导入中的哪一个用于 StringIO(在 pandas 中)?这是一个长期存在的问题,四年多来从未得到解决。
StringIO.StringIO
(Python 2) /io.StringIO
(Python 3)- 优点:更稳定的面向未来的代码,但迫使我们进行版本分叉,例如参见 EmilH 底部的代码。
pandas.compat.StringIO
- pandas.compat 是 0.13.0(2014 年 1 月)引入的 2/3 兼容性包(“无需 2to3”)
- 从 0.22 开始,pandas.compat 包仍被标记为“私有”,并且没有计划公开“警告 Pandas.core、pandas.compat 和 pandas.util 顶级模块被认为是私有的。功能的稳定性在那些模块中不能保证。” 尽管自 0.13 以来它们基本上没有破裂
- pandas.compat 源定义了
builtins, StringIO/cStringIO, BytesIO, cPickle, httplib
范围、过滤器、映射和 zip 的导入、迭代器版本,以及 Python 3 兼容性的其他必要元素 - 请参阅0.13.0 whatsnew
从标准(来自 EmilH)导入的版本 2/3 分叉代码:
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
# Note: but this is very much a poor-man's version of pandas.compat, which contains much much more
笔记:
pandas.compat
自 pandas 0.13.0(2014 年 1 月)作为 pandas 中的子包以来就存在- 它似乎也作为独立包发布:0.1.0(2017 年 6 月 10 日)和 0.1.1(2017 年 6 月 10 日)