Як створити файлоподібний об’єкт (того самого типу качки, що і Файл) із вмістом рядка?
Як створити файлоподібний об’єкт (того самого типу качки, що і Файл) із вмістом рядка?
Відповіді:
Для Python 2.x використовуйте модуль StringIO . Наприклад:
>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'
Я використовую cStringIO (що швидше), але зверніть увагу, що він не приймає рядки Unicode, які не можуть кодуватися як звичайні рядки ASCII . (Ви можете переключитися на StringIO, змінивши "з cStringIO" на "з StringIO".)
Для Python 3.x використовуйте io
модуль.
f = io.StringIO('foo')
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')))
Дві хороші відповіді. Я додав би невеличку хитрість - якщо вам потрібен справжній файловий об'єкт (деякі методи очікують такого, а не просто інтерфейс), ось спосіб створити адаптер: