Question

I did this:

import cStringIO.StringIO as StringIO

And I realize I've been using it everywhere. Is that fine? Is it treated the same as StringIO?

Was it helpful?

Solution

They are not the same. cStringIO doesn't correctly handle unicode characters.

>>> 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)

OTHER TIPS

Nor can you set attributes on a cStringIO.StringIO instance:

>>> 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'

Several libraries depend on File-like objects having either a name or content_type attribute, so cStringIO.StringIO does not work in these instances.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top