是否有python StringIO
类的替代品,其中一个可以与bytes
而不是字符串一起使用?Python的StringIO替换与字节而不是字符串?
这可能并不明显,但如果您使用StringIO来处理二进制数据,那么对于Python 2.7或更新版本而言,您并不幸运。
是否有python StringIO
类的替代品,其中一个可以与bytes
而不是字符串一起使用?Python的StringIO替换与字节而不是字符串?
这可能并不明显,但如果您使用StringIO来处理二进制数据,那么对于Python 2.7或更新版本而言,您并不幸运。
尝试io.BytesIO
。
它在那里:http://docs.python.org/release/2.7.2/library/io.html#io.BytesIO – matchew
是的,它适用于Python 3.3 –
在Python 2.6/2.7中,io模块旨在用于与Python 3.X兼容。从文档:
版本2.6中的新功能。
io模块为流处理提供了Python 接口。在 Python 2.x中,这是 替代内置文件 的对象,但在Python 3.x中,它是 默认接口,用于访问文件流和 流。
注该模块已经 主要设计为Python 3.x中,你 必须要知道,本文件中的 “字节”的所有用途指 STR型(其中字节是别名) , 和“文本”的所有用法是指 unicode类型。此外,这两个 类型在IOo API中不可互换。
在Python版本早于3.X的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。未经编辑的屏幕转储(在山坳80 Windows命令提示符窗口包裹和所有):
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的代码库,您需要努力工作。使用six模块应该有很大的帮助。
你的问题并不明显。请通过显示在2.6但不在2.7下工作的代码来证明您的指称问题。或者看我的答案。 –
作者还没有选择正确答案! – heltonbiker