是否有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