141

How do I create a file-like object (same duck type as File) with the contents of a string?

4 Answers 4

173

For Python 2.x, use the StringIO module. For example:

>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'

I use cStringIO (which is faster), but note that it doesn't accept Unicode strings that cannot be encoded as plain ASCII strings. (You can switch to StringIO by changing "from cStringIO" to "from StringIO".)

For Python 3.x, use the io module.

f = io.StringIO('foo')
Sign up to request clarification or add additional context in comments.

3 Comments

There is a reason now to use cStringIO: cStringIO doesn't support unicode strings.
I think a better idea is to do 'import cStringIO as StringIO'. That way if you need to switch to the pure python implementation for any reason, you only need to change one line..
This works for Python2.7, too: io.StringIO(u'foo') I would use this
52

In Python 3.0:

import io

with io.StringIO() as f:
    f.write('abcdef')
    print('gh', file=f)
    f.seek(0)
    print(f.read())

The output is:

'abcdefgh'

Comments

16

If your file-like object is expected to contain bytes, the string should first be encoded as bytes, and then a BytesIO object can be used instead. In Python 3:

from io import BytesIO

string_repr_of_file = 'header\n byline\n body\n body\n end'
function_that_expects_bytes(BytesIO(bytes(string_repr_of_file,encoding='utf-8')))

Comments

12

This works for Python2.7 and Python3.x:

io.StringIO(u'foo')

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.