Могу ли я использовать cStringIO так же, как StringIO? - PullRequest
17 голосов
/ 13 января 2011

Я сделал это:

import cStringIO.StringIO as StringIO

И я понимаю, что использовал его везде.Это нормально?Это обрабатывается так же, как StringIO?

Ответы [ 2 ]

25 голосов
/ 13 января 2011

Они не одинаковы. cStringIO неправильно обрабатывает символы Юникода.

>>> 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)
6 голосов
/ 05 марта 2012

Также нельзя установить атрибуты для экземпляра 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'

Некоторые библиотеки зависят от файловых объектов, имеющих атрибут name или content_type, поэтому cStringIO.StringIO не работает в этих случаях.

...