Python的StringIO替代工作与字节而不是string?
有什么替代python的StringIO
类,一个将使用bytes
而不是string?
这可能不是很明显,但是如果你使用StringIO来处理二进制数据,那么对于Python 2.7或更新版本来说,你是不幸运的。
试试io.BytesIO
。
正如其他人 所指出的那样,你确实可以在2.7中使用StringIO
,但是BytesIO
是向前兼容的好select。
在Python 2.6 / 2.7中, io模块旨在用于与Python 3.X兼容。 从文档:
2.6版本中的新function
io模块提供Python接口来处理stream。 在Python 2.x中,这是build议作为内置文件对象的替代,但是在Python 3.x中,它是访问文件和stream的默认接口。
注意:由于这个模块主要是为Python 3.xdevise的,所以你必须知道,本文档中“bytes”的所有用法都是指strtypes(其中字节是别名),“text”请参阅unicodetypes。 而且,这两种types在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命令提示符窗口环绕在第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上的代码,请使用io
模块中的BytesIO
类。
如果你需要/想要一个支持2.7,2.6,…和3.x的代码库,你将需要更加努力。 使用这六个模块应该会有很大帮助。