Reputation: 149474
How do I create a file-like object (same duck type as File) with the contents of a string?
Upvotes: 140
Views: 94966
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
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
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