可以像使用StringIO一样使用cStringIO吗?

17 投票
2 回答
7675 浏览
提问于 2025-04-16 09:53

我做了这个:

import cStringIO.StringIO as StringIO

然后我发现我到处都在用它。这没问题吧?它和StringIO的处理方式一样吗?

2 个回答

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'

有一些库需要文件类对象具备 namecontent_type 这样的属性,所以在这些情况下,cStringIO.StringIO 就不能用了。

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)

撰写回答