Шаг 84.
Python: сборник рецептов.
Файлы и ввод-вывод. Выполнение операций ввода-вывода над строками

    На этом шаге мы рассмотрим использование классов io.StringIO и io.BytesIO.

Задача

    Вы хотите "передать" текст или бинарную строку программе, которая способна работать с файлоподобными объектами.

Решение

    Используйте классы io.StringIO и io.BytesIO для создания файлоподобных объектов, которые могут работать со строковыми данными. Например:

>>> import io
>>> s = io.StringIO()
>>> s.write('Hello World\n')
12
>>> print('This is a test', file=s)
>>> # Получить все уже записанные данные
>>> s.getvalue()
'Hello World\nThis is a test\n'
>>> 
>>> # Обернуть существующую строку файловым интерфейсом
>>> s = io.StringIO('Hello\nWorld\n')
>>> s.read(4)
'Hell'
>>> s.read()
'o\nWorld\n'
>>>

    Класс io.StringIO должен быть использован только для работы с текстом. Если вы работаете с бинарными данными, используйте io.BytesIO. Например:

>>> s = io.BytesIO()
>>> s.write(b'binary data')
11
>>> s.getvalue()
b'binary data'
>>> 


Обсуждение

    Классы StringIO и BytesIO наиболее полезны в случаях, когда вам нужно подменить обычный файл. Например, в юнит-тестах вы могли бы использовать StringIO для создания файлоподобного объекта, содержащего тестовые данные, которые передаются функции, предназначенной для работы с файлами.

    Обратите внимание, что экземпляры StringIO и BytesIO не имеют настоящего целочисленного файлового дескриптора. Поэтому они не будут работать с программами, которые требуют использования настоящих системных файлов (файлов, каналов, сокетов).

    На следующем шаге мы рассмотрим чтение и запись сжатых файлов с данными.




Предыдущий шаг Содержание Следующий шаг