有些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类型
```python
coding:utf-8
import StringIO
stringio = StringIO.StringIO(u'helloworld我是') print type(stringio) #
stringio.size = 10 #可以给实例赋任何属性 print stringio.getvalue() import cStringIO cs = cStringIO.StringIO(u'helloworld') print type(cs) #
cs.size = 10 #此处会报错,因为cStringIO.StringI没有属性size print cs.getvalue() ``` -
cStringIO不接收中文unicode字符
```python cs = cStringIO.StringIO(u'helloworldi我是')
异常
Traceback (most recent call last): File "test.py", line 10, in
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之禅」,回复「1024」免费获取Python资源