На этом шаге мы рассмотрим использование классов 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 не имеют настоящего целочисленного файлового дескриптора. Поэтому они не будут работать с программами, которые требуют использования настоящих системных файлов (файлов, каналов, сокетов).
На следующем шаге мы рассмотрим чтение и запись сжатых файлов с данными.