用字节而不是字符串工作的StringIO替换?

| python
StringIO
类是否可以替代one1ѭ而不是字符串? 可能不是很明显,但是如果您使用StringIO处理二进制数据,那么您在使用Python 2.7或更高版本时就不走运了。     
已邀请:
        尝试
io.BytesIO
。 正如其他人指出的那样,您确实可以在2.7中使用
StringIO
,但是forward4ѭ是向前兼容的不错选择。     
        在Python 2.6 / 2.7中,io模块旨在与Python 3.X兼容。从文档:   2.6版的新功能。      io模块提供Python   流处理接口。下   Python 2.x,建议作为   内置文件的替代   对象,但在Python 3.x中是   访问文件的默认界面和   流。      注意由于此模块已被   主要为Python 3.x设计的   必须知道,   本文档中的“字节”是指   str类型(其字节为别名),   而“文字”的所有用法均指   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上运行的代码,请使用
io
模块中的
BytesIO
类。 如果您需要/想要一个支持2.7、2.6,...和3.x的代码库,则需要更加努力。使用六个模块应该有很大帮助。     

要回复问题请先登录注册