





Для 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')
Я думаю, что лучше сделать «импортировать cStringIO как StringIO». Таким образом, если вам по какой-либо причине нужно переключиться на реализацию чистого Python, вам нужно будет изменить только одну строку.
Это работает и для Python2.7: 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())
@ A-B-B принятый ответ уже показывает такое использование. Мой ответ дополняющий: он демонстрирует with-оператор и методы записи, печати, поиска и чтения.
Два хороших ответа. Я бы добавил небольшую хитрость - если вам нужен реальный файловый объект (некоторые методы ожидают его, а не только интерфейс), вот способ создания адаптера:
«Страница не найдена» - rfk.id.au/software/projects/filelike/api/filelike.htm
Кажется, вернулся (7 лет спустя;)
Это работает для 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')))
Теперь есть причина использовать cStringIO: cStringIO не поддерживает строки Unicode.