Как мне создать файловый объект (того же типа утки, что и File) с содержимым строки?
89
Для Python 2.x используйте модуль StringIO . Например:
>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'
Я использую cStringIO (который быстрее), но учтите, что он не принимает строки Unicode, которые нельзя закодировать как простые строки ASCII . (Вы можете переключиться на StringIO, изменив «from cStringIO» на «from StringIO».)
Для Python 3.x используйте io
модуль.
f = io.StringIO('foo')
io.StringIO(u'foo')
я бы использовал этоВ Python 3.0:
import io with io.StringIO() as f: f.write('abcdef') print('gh', file=f) f.seek(0) print(f.read())
источник
with
методы формулирования и записи, печати, поиска, чтения.Это работает для Python2.7 и Python3.x:
io.StringIO(u'foo')
источник
Если ожидается, что ваш файлоподобный объект будет содержать байты, строка должна быть сначала закодирована как байты, а затем вместо этого может использоваться объект 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')))
источник
Два хороших ответа. Я бы добавил небольшую хитрость - если вам нужен реальный файловый объект (некоторые методы ожидают его, а не только интерфейс), вот способ создания адаптера:
источник