Как мне обернуть строку в файл в Python?

Как мне создать файловый объект (того же типа утки, что и File) с содержимым строки?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
94
0
48 682
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Для 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: cStringIO не поддерживает строки Unicode.

Armin Ronacher 27.09.2008 01:38

Я думаю, что лучше сделать «импортировать cStringIO как StringIO». Таким образом, если вам по какой-либо причине нужно переключиться на реализацию чистого Python, вам нужно будет изменить только одну строку.

John Fouhy 29.09.2008 01:55

Это работает и для Python2.7: io.StringIO(u'foo') Я бы использовал это

guettli 27.02.2018 18:01

В 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-оператор и методы записи, печати, поиска и чтения.

jfs 31.10.2016 15:53

Два хороших ответа. Я бы добавил небольшую хитрость - если вам нужен реальный файловый объект (некоторые методы ожидают его, а не только интерфейс), вот способ создания адаптера:

«Страница не найдена» - rfk.id.au/software/projects/filelike/api/filelike.htm

jfs 08.02.2009 02:00

Кажется, вернулся (7 лет спустя;)

Ethan Furman 10.11.2015 03:40

Это работает для 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')))

Другие вопросы по теме