StringIO---像檔案一樣讀寫字串
阿新 • • 發佈:2018-12-11
有些API僅接受檔案物件,但是你只有一個字串,比如使用gzip模組壓縮字串的時候,StringIO就可以派上用場了
import gzip import StringIO stringio = StringIO.StringIO() gzip_file = gzip.GzipFile(fileobj=stringio, mode='w') gzip_file.write('hello world') gzip_file.close() print stringio.getvalue() #此方法必須是在stringio.close()呼叫前,否則ValueError
cStringIO:效能更高的StringIO
cStringIO是一個速度更快的StringIO,其介面與StringIO基本類似,但是有以下區別:
-
不能構建任何版本的子類,因為它的構造方法返回的是一個built-in型別
#coding:utf-8 import StringIO stringio = StringIO.StringIO(u'helloworld我是') print type(stringio) #<type 'instance'> stringio.size = 10 #可以給例項賦任何屬性 print stringio.getvalue
-
cStringIO不接收中文unicode字元
cs = cStringIO.StringIO(u'helloworldi我是') #異常 Traceback (most recent call last): File "test.py", line 10, in <module> cs = cStringIO.StringIO(u'helloworldi鎴戞槸') UnicodeEncodeError: 'ascii' codec can't encode characters in position 11-12: ordinal not in range(128)
python3 StringIO
python3去掉了StringIO和cStringIO模組,取而代之的是io.StringIO,要寫出相容py2和py3的程式碼的話,使用:
try: from cStringIO import StringIO # py2 except ImportError: from io import StringIO # py3
關注公眾號「Python之禪」(id:vttalk)獲取最新文章