Daryl Spitzer
Daryl Spitzer

Reputation: 149474

How do I wrap a string in a file in Python?

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

Upvotes: 140

Views: 94966

Answers (4)

jfs
jfs

Reputation: 414565

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'

Upvotes: 52

lensonp
lensonp

Reputation: 423

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

Upvotes: 16

guettli
guettli

Reputation: 27969

This works for Python2.7 and Python3.x:

io.StringIO(u'foo')

Upvotes: 11

Daryl Spitzer
Daryl Spitzer

Reputation: 149474

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

Upvotes: 170

Related Questions