是否有任何替代 pythonStringIO
类的替代品,一个可以bytes
代替字符串的替代品?
这可能不是很明显,但是如果您使用 StringIO 处理二进制数据,那么您在 Python 2.7 或更高版本中就不走运了。
是否有任何替代 pythonStringIO
类的替代品,一个可以bytes
代替字符串的替代品?
这可能不是很明显,但是如果您使用 StringIO 处理二进制数据,那么您在 Python 2.7 或更高版本中就不走运了。
试试io.BytesIO
。
正如其他人 指出的那样,您确实可以StringIO
在 2.7 中使用,但BytesIO
对于向前兼容来说是一个不错的选择。
在 Python 2.6/2.7 中,io模块旨在与 Python 3.X 兼容。从文档:
2.6 版中的新功能。
io 模块提供 Python 接口来进行流处理。在 Python 2.x 中,这是作为内置文件对象的替代方案而提出的,但在 Python 3.x 中,它是访问文件和流的默认接口。
注意 因为这个模块主要是为 Python 3.x 设计的,所以你必须知道,本文档中所有使用的“bytes”都是指 str 类型(其中 bytes 是别名),所有使用的“text”参考unicode类型。此外,这两种类型在 io API 中不可互换。
在 3.X 之前的 Python 版本中,StringIO模块包含 StringIO 的旧版本,与io.StringIO
2.6 之前的 Python 版本不同:
>>> import StringIO
>>> s=StringIO.StringIO()
>>> s.write('hello')
>>> s.getvalue()
'hello'
>>> import io
>>> s=io.StringIO()
>>> s.write('hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string argument expected, got 'str'
>>> s.write(u'hello')
5L
>>> s.getvalue()
u'hello'
你说:“这可能不是很明显,但是如果你使用 StringIO 来处理二进制数据,那么你在 Python 2.7 或更新版本上就不走运了”。
这并不明显,因为它不是真的。
如果您有适用于 2.6 或更早版本的代码,它会继续适用于 2.7。未经编辑的屏幕转储(Windows 命令提示符窗口环绕在 col 80 和所有位置):
C:\Users\John>\python26\python -c"import sys,StringIO;s=StringIO.StringIO();s.wr
ite('hello\n');print repr(s.getvalue()), sys.version"
'hello\n' 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
C:\Users\John>\python27\python -c"import sys,StringIO;s=StringIO.StringIO();s.wr
ite('hello\n');print repr(s.getvalue()), sys.version"
'hello\n' 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)]
如果您需要编写在 2.7 和 3.x 上运行的代码,请使用模块BytesIO
中的类。io
如果您需要/想要一个支持 2.7、2.6、... 和 3.x 的代码库,您将需要更加努力。使用六个模块应该会有很大帮助。