Сообщить об ошибке.

Модуль io, операции ввода/вывода в Python.

Ввод/вывод текста, двоичных и необработанных потоков.

Модуль io предоставляет основные средства Python для работы с различными типами ввода-вывода. Существует три основных типа ввода-вывода: Text I/O - текстовый ввод-вывод, Binary I/O двоичный ввод-вывод и Raw I/O - необработанный ввод-вывод. Конкретный объект, принадлежащий любой из этих категорий, называется файловым объектом.

Независимо от своей категории каждый конкретный объект потока также будет иметь различные возможности: он может быть доступен только для чтения, только для записи или для чтения и записи. Он также может разрешать произвольный произвольный доступ (поиск вперед или назад в любом месте) или только последовательный доступ в случае сокета или канала.

Все потоки тщательно следят за типом данных, которые им предоставляются. Например, передача объекта str методу write() двоичного потока вызовет исключение TypeError. То же самое будет, если передать объект bytes методу write() текстового потока.

Текстовый ввод-вывод:

Текстовый ввод/вывод ожидает и производит объекты типа str. Это означает, что каждый раз, когда хранилище изначально состоит из байтов, например в случае файла, кодирование и декодирование данных выполняется прозрачно, а также учитывается необязательный перевод специфичных для платформы символов новой строки.

Самый простой способ создать текстовый поток с помощью встроенной функции open(), при желании, указав кодировку:

fp = open("myfile.txt", "r", encoding="utf-8")

Текстовые потоки в памяти также доступны в виде объектов io.StringIO:

fp = io.StringIO("some initial text data")

API текстового потока подробно описан в документации по io.TextIOBase.

Двоичный ввод-вывод:

Двоичный ввод/вывод, также называемый буферизованным вводом/выводом ожидает объекты, похожие на байты, и создает объекты типа bytes. Кодирование, декодирование или перевод новой строки не выполняется. Эта категория потоков может использоваться для всех видов нетекстовых данных, а также когда требуется ручное управление обработкой текстовых данных.

Самый простой способ создать двоичный поток - использовать встроенную функцию open() в режиме mode='b':

fp = open("myfile.jpg", "rb")

Двоичные потоки в памяти также доступны в виде объектов io.BytesIO:

fp = io.BytesIO(b"some initial binary data: \x00\x01")

API двоичного потока подробно описан в документации по io.BufferedIOBase. Другие модули могут предоставлять дополнительные способы создания текстовых или двоичных потоков.

Необработанный ввод-вывод:

Необработанный ввод/вывод, также называемый небуферизованным вводом/выводом обычно используется как низкоуровневый строительный блок для двоичных и текстовых потоков. Очень редко встречается необходимость напрямую манипулировать необработанным потоком из пользовательского кода. Тем не менее, вы можете создать необработанный поток, открыв файл в двоичном режиме mode='rb' с отключенной буферизацией buffering=0:

fp = open("myfile.jpg", "rb", buffering=0)

API необработанного потока подробно описан в документации по io.RawIOBase.