109

如何使用字符串的内容创建类似文件的对象(与 File 相同的鸭子类型)?

4

5 回答 5

138

对于 Python 2.x,请使用StringIO模块。例如:

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

我使用 cStringIO (更快),但请注意,它不接受无法编码为纯 ASCII 字符串的 Unicode 字符串。(您可以通过将“from cStringIO”更改为“from StringIO”来切换到 StringIO。)

对于 Python 3.x,请使用该io模块。

f = io.StringIO('foo')
于 2008-09-26T19:34:04.977 回答
38

在 Python 3.0 中:

import io

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

输出是:

'abcdefgh'
于 2008-09-26T22:00:25.923 回答
9

这适用于 Python2.7 和 Python3.x:

io.StringIO(u'foo')
于 2018-02-27T15:02:22.077 回答
9

如果您的类文件对象预计包含字节,则应首先将字符串编码为字节,然后可以使用BytesIO对象代替。在 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')))
于 2020-02-05T20:01:21.203 回答
2

两个很好的答案。我要添加一个小技巧——如果你需要一个真正的文件对象(有些方法需要一个,而不仅仅是一个接口),这里有一种创建适配器的方法:

于 2008-09-27T12:19:45.217 回答