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

TIM*_*MEX 17 c python stringio

我这样做了:

import cStringIO.StringIO as StringIO
Run Code Online (Sandbox Code Playgroud)

我意识到我到处都在使用它.那很好吗?它与StringIO一样对待吗?

Mar*_*ers 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)
Run Code Online (Sandbox Code Playgroud)

  • 另一方面,如果您自己编码字符串,您仍然可以将它们提供给cStringIO.例如,`cStringIO.StringIO().写(U '\ u2603')`不工作,但`cStringIO.StringIO().写(U '\ u2603'.encode(' UTF-8' ))`工作良好. (6认同)
  • @Omnifarious:Python3中没有cStringIO.它被替换为io.StringIO和io.BytesIO,它们与Python3一致,分别用于Unicode和字节字符串,并且如果可用则自动使用本机实现(需要在Python2中手动加载本机实现,如cStringIO)一个奇怪的API兼容性工件). (5认同)

cla*_*ion 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'
Run Code Online (Sandbox Code Playgroud)

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