17

我这样做了:

import cStringIO.StringIO as StringIO

我意识到我到处都在使用它。可以吗?它是否与 StringIO 一样对待?

4

2 回答 2

25

它们是不相同的。cStringIO不能正确处理 unicode 字符。

>>> StringIO.StringIO().write(u'\u0080')

>>> cStringIO.StringIO().write(u'\u0080')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128)
于 2011-01-13T06:48:51.133 回答
6

您也不能在 cStringIO.StringIO 实例上设置属性:

>>> from cStringIO import StringIO
>>> s = StringIO()
>>> s.name = 'myfile'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'cStringIO.StringO' object has no attribute 'name'

一些库依赖于具有 anamecontent_type属性的类文件对象,因此 cStringIO.StringIO 在这些实例中不起作用。

于 2012-03-05T02:48:14.747 回答