io
— Основные инструменты для работы с потоками¶
Исходный код: Lib/io.py
Обзор¶
Модуль io
предоставляет главные средства Python для контакта с
различными типами I/O. Существует три основных типа I/O:
текстовый I/O, бинарный I/O и сырой I/O. Это универсальные категории, и для
каждого из них могут быть используемый различные резервные хранилища. Конкретный
объект, относящийся к любой из этих категорий, называется файловым объектом. Другими
общими терминами являются поток и файлоподобный объект.
Независимо от своей категории, каждый конкретный объект потока также будет иметь различные возможности: он может быть доступен только для чтения, только для записи или для чтения-записи. Он также может разрешать произвольный произвольный доступ (поиск прямого или обратного в любое местоположение) или только последовательный доступ (например, в случае сокет или пайп).
Все потоки внимательно относятся к типу данных, которые вы им даете. Например,
предоставление объекта str
методу write()
двоичного потока вызовет
TypeError
. Так будет давать объект bytes
методу write()
текстового
потока.
Изменено в версии 3.3: Операции, которые используемый поднять IOError
сейчас поднимают OSError
,
так как IOError
сейчас является алиас OSError
.
Текстовый I/O¶
Текстовый I/O ожидает и производит объекты str
. Это означает, что
каждый раз, когда резервное хранилище изначально состоит из байтов (например, в
случае файла), кодировка и декодирование данных выполняется прозрачно, а также
необязательный перевод символов новой строки, специфичных для платформы.
Проще всего создать текстовый поток с помощью open()
, опционально указывая
кодировку:
f = open("myfile.txt", "r", encoding="utf-8")
Текстовые потоки в памяти также доступны как StringIO
объекты:
f = io.StringIO("some initial text data")
Текстовый API потока описан подробно в документации TextIOBase
.
Бинарный I/O¶
Двоичный I/O (также называемый буферизованый I/O) ожидает
байтообразные объекты и
производит объекты bytes
. кодировка, декодирование или преобразование
новой строки не выполняется. Эта категория потоков может быть используемый для
всех видов нетекстовых данных, а также когда требуется ручное управление
обработкой текстовых данных.
Самый простой способ создать двоичный поток - с помощью open()
с
'b'
в режиме строки:
f = open("myfile.jpg", "rb")
Двоичные потоки в памяти также доступны в качестве объектов BytesIO
:
f = io.BytesIO(b"some initial binary data: \x00\x01")
Двоичный поток API подробно описан в документах BufferedIOBase
.
Другие библиотечные модули могут обеспечивать дополнительные способы создания
текстовых или двоичных потоков. См. socket.socket.makefile()
, например.
Сырой I/O¶
Сырым I/O (также названный небуферизованный I/O) обычно используется как стандартный блок низкоуровневое для текстовых потоков и набора из двух предметов; редко бывает полезно непосредственно манипулировать сырьевым потоком от пользователя код. Тем не менее, можно создать необработанный поток, открыв файл в двоичном режиме с отключенной буферизацией:
f = open("myfile.jpg", "rb", buffering=0)
API необработанного потока подробно описан в документах RawIOBase
.
Интерфейс модуля высокого уровня¶
-
io.
DEFAULT_BUFFER_SIZE
¶ int, содержащий размер буфера по умолчанию, используемый буферизованными классами I/O модуля.
open()
по возможности использует blksize файла (полученный методомos.stat()
).
-
io.
open
(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)¶ Это - алиас для встроенной функции
open()
.Эта функция вызывает событие аудита
open
с аргументамиpath
,mode
иflags
. Аргументыmode
иflags
могли быть изменены или выведены из исходного вызова.
-
io.
open_code
(path)¶ Открывает предоставленный файл с режимом
'rb'
. Эта функция должна быть используемый, когда цель состоит в том, чтобы считать содержимое исполняемым код.path
должен бытьstr
и абсолютным путем.Поведение этой функции может быть переопределено более ранним вызовом
PyFile_SetOpenCodeHook()
. Однако, предполагая, чтоpath
- этоstr
и абсолютный путь,open_code(path)
всегда должен вести себя так же, какopen(path, 'rb')
. Переопределение поведения предназначено для дополнительной проверки или предварительной обработки файла.Добавлено в версии 3.8.
-
exception
io.
BlockingIOError
¶ Это - совместимость алиас для встроенного исключения
BlockingIOError
.
-
exception
io.
UnsupportedOperation
¶ Исключение, наследующее
OSError
иValueError
, которое возникает при вызове неподдерживаемой операции в потоке.
Потоки в памяти¶
Также можно использовать str
или байтоподобный объект
в качестве файла как для
чтения, так и для записи. Для строки StringIO
может быть используемый как
файл, открытый в текстовом режиме. BytesIO
может быть используемый, как файл,
открытый в двоичном режиме. Оба обеспечивают полную возможность чтения-записи с
произвольным доступом.
См.также
sys
содержит стандартные потоки ввода-вывода: sys.stdin
, sys.stdout
и
sys.stderr
.
Иерархия классов¶
Реализация I/O потоков организована как иерархия классов. Первые абстрактный базовый класс (ABC), которые являются используемый, чтобы определить различные категории потоков, затем конкретные классы, обеспечивающие стандартные внедрения потока.
Примечание
Абстрактные базовые классы также обеспечивают реализацию некоторых методов по умолчанию, чтобы помочь реализации конкретных классов потоков. Например,
BufferedIOBase
обеспечивает неоптимизированные реализацииreadinto()
иreadline()
.
В верхней части иерархии I/O находится абстрактный базовый класс
IOBase
. Он определяет базовый интерфейс для потока. Однако следует отметить,
что нет разделения между чтением и записью в потоки; реализации могут поднимать
UnsupportedOperation
, если они не поддерживают данную операцию.
RawIOBase
ABC удлиняет IOBase
. Он касается чтения и записи байтов
в поток. FileIO
подклассы RawIOBase
для обеспечения интерфейса файлов в
файловой системе машины.
BufferedIOBase
ABC имеет дело с буферизованием на сыром потоке байта
(RawIOBase
). Его буферные потоки подклассы, BufferedWriter
, BufferedReader
и
BufferedRWPair
, доступные для чтения, записи и чтения и записи. BufferedRandom
обеспечивает буферизованный интерфейс для потоков произвольного доступа. Другой
BufferedIOBase
подкласс, BytesIO
, является потоком байтов в памяти.
TextIOBase
ABC, другой подкласс IOBase
, имеет дело с потоками,
байты которых представляют текст, и обращается с кодировка и расшифровывающий
к и от строки. TextIOWrapper
, которая расширяет его, представляет собой
буферизованный текстовый интерфейс для буферизованного исходного потока
(BufferedIOBase
). Наконец, StringIO
является потоком в памяти для текста.
Имена аргумента не часть спецификации, и только аргументы open()
предназначены, чтобы быть используемый как аргументами ключевой.
Следующая таблица суммирует ABCs, обеспеченный io
module:
ABC | Наследуется | Методы заглушки | Методы и свойства миксины |
---|---|---|---|
IOBase |
fileno , seek ,
and truncate |
close , closed , __enter__ ,
__exit__ , flush , isatty , __iter__ ,
__next__ , readable , readline ,
readlines , seekable , tell ,
writable , and writelines |
|
RawIOBase |
IOBase |
readinto and
write |
Inherited IOBase methods, read ,
and readall |
BufferedIOBase |
IOBase |
detach , read ,
read1 , and write |
Inherited IOBase methods, readinto ,
and readinto1 |
TextIOBase |
IOBase |
detach , read ,
readline , and
write |
Inherited IOBase methods, encoding ,
errors , and newlines |
Базовые классы I/O¶
-
class
io.
IOBase
¶ Абстрактный базовый класс для всех классов I/O, действующих на потоки байтов. Отсутствует публичный конструктор.
Этот класс предоставляет пустые абстрактные реализации для многих методов, которые производные классы могут переопределять выборочно; реализации по умолчанию представляют файл, который невозможно прочитать, записать или просмотреть.
Даже если
IOBase
не объявляетread()
илиwrite()
, поскольку их сигнатуры будут различаться, реализации и клиенты должны рассматривать эти методы как часть интерфейса. Кроме того, реализации могут вызыватьValueError
(илиUnsupportedOperation
) при вызове операций, которые они не поддерживают.Базовый тип используемый для двоичных данных, считываемых из файла или записываемых в файл, является
bytes
. Другие байтоподобные объекты также принимаются в качестве аргументов метода. Текст классы I/O работает с даннымиstr
.Обратите внимание, что вызов любого метода (даже запросов) в закрытом потоке не определен. В этом случае реализации могут поднять
ValueError
.IOBase
(и его подклассы) поддерживает протокол итератора, означающий, что объектIOBase
можно итерировать над получением строк в потоке. Линии определены немного по-другому в зависимости от того, является ли поток двойным потоком (приводящий к байтам) или текстовым потоком (приводящий к символ строки). См.readline()
ниже.IOBase
также является менеджером контекст и поэтому поддерживаетwith
инструкция. В этом примере, file закрывается после того, как наборwith
инструкция будет завершена — даже, если произойдет исключение:with open('spam.txt', 'w') as file: file.write('Spam and eggs!')
IOBase
предоставляет следующие данные атрибуты и методы:-
close
()¶ Промойте и закройте этот поток. Этот метод не действует, если файл уже закрыт. После закрытия файла любая операция над файлом (например, чтение или запись) вызовет
ValueError
.Для удобства разрешается вызывать этот метод более одного раза; однако только первый вызов будет иметь эффект.
-
closed
¶ True
, если поток закрыт.
-
fileno
()¶ Возвращает базовый файл дескриптор (целое число) потока, если он существует.
OSError
поднят, если объект IO не использует файл дескриптор.
-
flush
()¶ Очистить буферы записи потока, если применимо. Это ничего не делает для потоков только для чтения и неблокирующих потоков.
-
isatty
()¶ Возвращает
True
если поток является интерактивным (т.е. подключен к терминалу/устройству tty).
-
readline
(size=-1)¶ Прочитать и возвращает одну строку из потока. Если параметр size указан, будет считано не более size байт.
Терминатор строки всегда является
b'\n'
для двоичных файлов; для текстовых файлов аргумент newlineopen()
может быть используемый, чтобы выбрать признанного терминатора (терминаторов) линии.
-
readlines
(hint=-1)¶ Прочитать и возвращает список строк из потока. hint можно указать для управления количеством считанных строк: больше строки не будут считываться, если общий размер (в байтах/символах) всех строк на данный момент превышает hint.
Обратите внимание, что итерация объектов файла с помощью метода
for line in file: ...
уже возможна без вызова методаfile.readlines()
.
-
seek
(offset, whence=SEEK_SET)¶ Измените позицию потока на заданный байт offset. offset интерпретируется относительно положения, обозначенного как whence. Дефолт значение для whence является
SEEK_SET
. Значения для whence:SEEK_SET
или0
- начало потока (по умолчанию); offset должно быть нулевым или положительнымSEEK_CUR
или1
- текущее положение потока; offset может быть отрицательнымSEEK_END
или2
- конец потока; offset обычно отрицательный
Возвращает новое абсолютное положение.
Добавлено в версии 3.1: Константы
SEEK_*
.Добавлено в версии 3.3: Некоторые операционные системы могут поддерживать дополнительные значения, такие как
os.SEEK_HOLE
илиos.SEEK_DATA
. Допустимая значения для файла может зависеть от того, открыт ли он в текстовом или двоичном режиме.
-
seekable
()¶ Возвращает
True
если поток поддерживает произвольный доступ. ЕслиFalse
,seek()
,tell()
иtruncate()
подниметOSError
.
-
tell
()¶ Возвращает текущую позицию потока.
-
truncate
(size=None)¶ Измените размеры потока к данному size в байтах (или текущее положение, если size не определен). Текущее положение потока не изменено. Это изменение размера может увеличить или уменьшить текущий размер файла. В случае расширения содержимое новой файловой области зависит от платформы (в большинстве систем дополнительные байты заполняются нулем). Новый размер файла равен возвращенный.
Изменено в версии 3.5: Теперь Windows будет заполнять файлы при расширении.
-
writable
()¶ Возвращает
True
если поток поддерживает запись. ЕслиFalse
,write()
иtruncate()
подниметOSError
.
-
writelines
(lines)¶ Записать список строк в поток. Сепараторы строк не добавляются, поэтому обычно для каждой из линий предусмотрен сепаратор на конце.
-
-
class
io.
RawIOBase
¶ Базовый класс для необработанных двоичных I/O. Он наследует
IOBase
. Отсутствует публичный конструктор.Сырой двоичный I/O, как правило, обеспечивает доступ низкоуровневое к основному устройству OS или API, и не пытается заключить в капсулу его в примитивах высокого уровня (это оставляют буферизированному I/O и тексту I/O, описал позже на этой странице).
Кроме атрибуты и методов из
IOBase
,RawIOBase
предоставляет следующие методы:-
read
(size=-1)¶ Считывание до size байт из объекта и их возвращает. Для удобства, если size не указан или -1, все байты до EOF будут возвращенный. В противном случае выполняется только один системный вызов. Меньше, чем байты size могут быть возвращенный если требование операционной системы возвращает меньше, чем байты size.
Если 0 байт равно возвращенный, а size не 0, это означает конец файла. Если объект находится в неблокирующем режиме и нет доступных байтов,
None
является возвращенный.Реализация по умолчанию откладывается на
readall()
иreadinto()
.
-
readall
()¶ Считывание и возвращает всех байтов из потока до EOF с использованием при необходимости нескольких вызовов потока.
-
readinto
(b)¶ Прочитать байты в предварительно ассигнованный, перезаписываемый байтоподобным объектом b и возвращает число прочитанных байтов. Например, b может быть
bytearray
. Если объект находится в неблокирующем режиме и нет доступных байтов,None
является возвращенный.
-
write
(b)¶ Записать переданный байтоподобный объект, b в базовый исходный поток и возвращает число записанных байтов. Это может быть меньше длины b в байтах, в зависимости от специфики базового исходного потока, и особенно если он находится в неблокирующем режиме.
None
является возвращенный, если исходный поток установлен не блокировать и в него не может быть легко записан один байт. Посетитель может выпустить или видоизменить b после этого метода возвращает, таким образом, внедрение должно только получить доступ к b во время требования метода.
-
-
class
io.
BufferedIOBase
¶ Базовый класс для двоичных потоков, поддерживающих какую-либо буферизацию. Он наследует
IOBase
. Отсутствует конструктор public.Главное отличие от
RawIOBase
заключается в том, что методыread()
,readinto()
иwrite()
будут пытаться (соответственно) считывать столько входных данных, сколько требуется, или потреблять все заданные выходные данные за счет выполнения, возможно, нескольких системных вызовов.Кроме того, те методы могут поднять
BlockingIOError
, если основной сырой поток находится в неблокировании режима и не может взять или дать достаточно данных; в отличие от их коллегRawIOBase
, они никогда не будут возвращаетNone
.Кроме того, метод
read()
не имеет реализации по умолчанию, которая откладывает наreadinto()
.Типичная реализация
BufferedIOBase
должна наследовать не от реализацииRawIOBase
, а сворачивать, какBufferedWriter
иBufferedReader
do.BufferedIOBase
предоставляет или отвергает эти методы и атрибут в дополнение к методам отIOBase
:-
raw
¶ Базовый исходный поток (сущность
RawIOBase
), с которымBufferedIOBase
имеет дело. Это не является частью APIBufferedIOBase
и может отсутствовать в некоторых реализациях.
-
detach
()¶ Отделите исходный поток от буфера и возвращает его.
После отделения исходного потока буфер находится в непригодном для использования состояние.
У некоторых буферов, как
BytesIO
, нет понятия единственного сырого потока к возвращает из этого метода. Они поднимаютUnsupportedOperation
.Добавлено в версии 3.1.
-
read
(size=-1)¶ Чтение и возвращает до size байт. Если аргумент опущен,
None
или отрицателен, данные считываются и возвращенный до достижения EOF. Пустой объектbytes
- возвращенный, если поток уже в EOF.Если аргумент положительный, и базовый исходный поток не является интерактивным, может быть выдано несколько необработанных считываний, чтобы удовлетворить счетчику байтов (если не достигнут EOF первым). Но для интерактивных необработанных потоков будет выпущено максимум одно необработанное чтение, и короткий результат не предполагает, что EOF неизбежен.
BlockingIOError
поднят, если основной сырой поток находится в не режим блокирования и не имеет никаких доступных данных в данный момент.
-
read1
([size])¶ Чтение и возвращает до size байт, причем не более одного вызова метода
read()
(илиreadinto()
) базового исходного потока. Это может быть полезно при реализации собственной буферизации поверх объектаBufferedIOBase
.Если size равно
-1
(по умолчанию), произвольное число байт равно возвращенный (больше нуля, если не достигнуто значение EOF).
-
readinto
(b)¶ Прочитать байты в предварительно ассигнованный, перезаписываемый байтоподобный объект b и возвращает число прочитанных байтов. Например, b может быть
bytearray
.Как и
read()
, множество считываний может быть выдано базовому исходному потоку, если последний не является интерактивным.BlockingIOError
поднят, если основной сырой поток находится в не режим блокирования и не имеет никаких доступных данных в данный момент.
-
readinto1
(b)¶ Считывание байтов в предварительно выделенные, доступные для записи байтоподобного объекта b с использованием не более одного вызова метода
read()
(илиreadinto()
) базового исходного потока. Возвращает число считанных байтов.BlockingIOError
поднят, если основной сырой поток находится в не режим блокирования и не имеет никаких доступных данных в данный момент.Добавлено в версии 3.5.
-
write
(b)¶ Записать переданный байтоподобный объект, b и возвращает количество записанных байтов (всегда равно длине b в байтах, так как в случае неудачи записи поднимется
OSError
). В зависимости от фактической реализации эти байты могут быть легко записаны в базовый поток или сохранены в буфере по причинам производительности и задержки.Когда в неблокировании режима,
BlockingIOError
поднят, если данные должны были быть написаны сырому потоку, но это не могло бы принять все данные без блокирования.Посетитель может выпустить или видоизменить b после этого метода возвращает, таким образом, внедрение должно только получить доступ к b во время требования метода.
-
Сырой файловый I/O¶
-
class
io.
FileIO
(name, mode='r', closefd=True, opener=None)¶ FileIO
представляет файл уровня оС, содержащий байты данных. Он реализует интерфейсRawIOBase
(и, следовательно, интерфейсIOBase
).name может быть одним из двух things:
- объект символ строка или
bytes
, представляющий путь к файлу, который будет открыт. В этом случае closefd должен бытьTrue
(по умолчанию), в противном случае возникает ошибка. - целое число, представляющее номер существующего файла уровня оС дескриптор,
к которому будет предоставлен доступ результирующему объекту
FileIO
. Когда объект FileIO будет закрыт, этот fd будет закрыт также, если closefd не установлен вFalse
.
mode может быть
'r'
,'w'
,'x'
или'a'
для чтения (по умолчанию), записи, монопольного создания или добавления. Файл будет создан, если он не существует при открытии для записи или добавления; он будет усечен при открытии для записи.FileExistsError
будет поднят, если он уже существует при открытии для создания. Открытие файла для создания подразумевает запись, поэтому этот режим ведет себя аналогично'w'
. Добавьте'+'
в режим, чтобы разрешить одновременное чтение и запись.Методы
read()
(при вызове с положительным аргументом),readinto()
иwrite()
в этом классе будут выполнять только один системный вызов.Пользовательское начало может быть используемый, передав подлежащее вызову как opener. Лежащий в основе файл дескриптор для объекта файла затем получается путем вызова метода opener с помощью (name, flags). opener должен возвращает открытый файл дескриптор (передача
os.open
как opener приводит к функциональности, аналогичной передачеNone
).Созданный файл будет non-inheritable.
Примеры использования параметра
open()
см. в встроенной функции opener.Изменено в версии 3.3: Добавлен параметр opener. Добавлен режим
'x'
.Изменено в версии 3.4: Теперь файл не наследуется.
В дополнение к атрибуты и методам из
IOBase
иRawIOBase
,FileIO
предоставляет следующие данные атрибуты:-
mode
¶ Режим, заданный в конструкторе.
-
name
¶ Имя файла. Это файл дескриптор файла, если в конструкторе не указано имя.
- объект символ строка или
Буферизированные потоки¶
Буферизованные потоки I/O предоставляют высокоуровневый интерфейс устройству I/O, чем сырой I/O.
-
class
io.
BytesIO
([initial_bytes])¶ Реализация потока с использованием буфера в байтах памяти. Он наследует
BufferedIOBase
. Буфер отбрасывается при вызове методаclose()
.Необязательный аргумент initial_bytes - это байтоподобный объект, содержащий начальные данные.
BytesIO
предоставляет или переопределяет эти методы в дополнение к методам изBufferedIOBase
иIOBase
:-
getbuffer
()¶ Возвращает считываемое и записываемое представление содержимого буфера без его копирования. Кроме того, изменение вида прозрачно обновит содержимое буфера:
>>> b = io.BytesIO(b"abcdef") >>> view = b.getbuffer() >>> view[2:4] = b"56" >>> b.getvalue() b'ab56ef'
Примечание
Пока вид существует, размер объекта
BytesIO
не может быть изменен или закрыт.Добавлено в версии 3.2.
-
read1
([size])¶ В
BytesIO
это то же самое, что иread()
.Изменено в версии 3.7: Аргумент size теперь необязателен.
-
readinto1
(b)¶ В
BytesIO
это то же самое, что иreadinto()
.Добавлено в версии 3.5.
-
-
class
io.
BufferedReader
(raw, buffer_size=DEFAULT_BUFFER_SIZE)¶ Буфер, обеспечивающий доступ более высокого уровня к считываемому последовательному объекту
RawIOBase
. Он наследуетBufferedIOBase
. При считывании данных из этого объекта больший объем данных может быть запрошен из базового исходного потока и сохранен во внутреннем буфере. Буферизованные данные затем могут быть возвращенный непосредственно при последующих считываниях.Конструктор создает
BufferedReader
для данного считываемого raw потока и buffer_size. Если значение buffer_size опущено, значениеDEFAULT_BUFFER_SIZE
равно используемый.BufferedReader
предоставляет или переопределяет эти методы в дополнение к методам изBufferedIOBase
иIOBase
:-
peek
([size])¶ Возвращает байтов из потока без продвижения позиции. Для удовлетворения вызова выполняется самое большее одно считывание в исходном потоке. Число байтов возвращенный может быть меньше или больше запрошенного.
-
read
([size])¶ Считывание и возвращает size байт, или если size не задан или отрицательный, до EOF или если вызов чтения будет заблокирован в неблокирующем режиме.
-
read1
([size])¶ Чтение и возвращает до size байт с одним вызовом в исходном потоке. Если буферизован хотя бы один байт, то возвращенный только буферизованные байты. В противном случае выполняется один вызов считывания необработанного потока.
Изменено в версии 3.7: Аргумент size теперь необязателен.
-
-
class
io.
BufferedWriter
(raw, buffer_size=DEFAULT_BUFFER_SIZE)¶ Буфер, обеспечивающий доступ более высокого уровня к записываемому последовательному объекту
RawIOBase
. Он наследуетBufferedIOBase
. При записи в этот объект данные обычно помещаются во внутренний буфер. Буфер будет записан в нижележащий объектRawIOBase
при различных условиях, включая:- когда буфер становится слишком маленьким для всех ожидающих данных;
- при вызове
flush()
; - когда запрашивается
seek()
(для объектовBufferedRandom
); - когда объект
BufferedWriter
закрыт или разрушен.
Конструктор создает
BufferedWriter
для данного записываемого потока raw. Если buffer_size не дан, он не выполняет своих обязательств кDEFAULT_BUFFER_SIZE
.BufferedWriter
предоставляет или переопределяет эти методы в дополнение к методам изBufferedIOBase
иIOBase
:-
flush
()¶ Принудительно поместить байты, хранящиеся в буфере, в исходный поток.
BlockingIOError
должен быть поднят, если сырой поток блокирует.
-
write
(b)¶ Записать байтоподобный объект, b и возвращает число записанных байтов. Если буфер должен быть записан, то в неблокирующем режиме поднимается
BlockingIOError
, а необработанный поток блокируется.
-
class
io.
BufferedRandom
(raw, buffer_size=DEFAULT_BUFFER_SIZE)¶ Буферизованный интерфейс для потоков произвольного доступа. Она наследует
BufferedReader
иBufferedWriter
.Конструктор создает устройство чтения и записи для искомого исходного потока, указанного в первом аргументе. Если buffer_size опущен, по умолчанию устанавливается значение
DEFAULT_BUFFER_SIZE
.BufferedRandom
способен на всеBufferedReader
илиBufferedWriter
может сделать. Кроме того, гарантировано осуществлениеseek()
иtell()
.
-
class
io.
BufferedRWPair
(reader, writer, buffer_size=DEFAULT_BUFFER_SIZE)¶ Буферизованный объект I/O, объединяющий два однонаправленных объекта
RawIOBase
- один читаемый, другой записываемый - в одну двунаправленную конечную точку. Он наследуетBufferedIOBase
.reader и writer - объекты
RawIOBase
, которые являются удобочитаемыми и writeable соответственно. Если buffer_size опущен, по умолчанию устанавливается значениеDEFAULT_BUFFER_SIZE
.BufferedRWPair
реализует все методыBufferedIOBase
, кромеdetach()
, что вызываетUnsupportedOperation
.Предупреждение
BufferedRWPair
не пытается синхронизировать доступ к основным исходным потокам. Не следует передавать ему тот же объект, что и программе чтения и записи; вместо этого используйтеBufferedRandom
.
Текстовый I/O¶
-
class
io.
TextIOBase
¶ Базовый класс для текстовых потоков. Этот класс обеспечивает символ и основанный на линии интерфейс, чтобы течь I/O. Он наследует
IOBase
. Отсутствует конструктор public.TextIOBase
предоставляет или переопределяет эти атрибуты данных и методы в дополнение к методам изIOBase
:-
encoding
¶ Имя кодировка используемый для декодирования байтов потока в строки и для кодирования строки в байты.
-
errors
¶ Установка ошибки декодера или кодера.
-
newlines
¶ Строка, кортеж строк или
None
, указывающий на переведенные на данный момент новые строки. В зависимости от реализации и флагов начального конструктора это может быть недоступно.
-
buffer
¶ Основной двоичный буфер (
BufferedIOBase
сущность) этоTextIOBase
имеет дело с. Это не является частью APITextIOBase
и может отсутствовать в некоторых реализациях.
-
detach
()¶ Отделите лежащий в основе двоичный буфер от
TextIOBase
и возвращает его.После отделения лежащего в основе буфера
TextIOBase
находится в непригодном для использования состояние.Некоторые реализации
TextIOBase
, такие какStringIO
, могут не иметь концепции базового буфера и вызов этого метода подниметUnsupportedOperation
.Добавлено в версии 3.1.
-
read
(size=-1)¶ Чтение и возвращает не более size символов из потока в виде одного
str
. Если size отрицательный илиNone
, считывает до EOF.
-
readline
(size=-1)¶ Чтение до новой строки или EOF и возвращает одного
str
. Если поток уже в EOF, пустой строка - возвращенный.Если указан параметр size, будет прочитано не более size символов.
-
seek
(offset, whence=SEEK_SET)¶ Смените положение потока к данному offset. Поведение зависит от параметра whence. Дефолт значение для whence является
SEEK_SET
.SEEK_SET
или0
: искать с начала потока (по умолчанию); offset должно быть числом возвращенный поTextIOBase.tell()
или нулевым. Любой другой offset значение производит неопределенное поведение.SEEK_CUR
или1
: «искать» на текущую должность; offset должен быть равен нулю, что является бездействием (все остальные значения не поддерживаются).SEEK_END
или2
: искать до конца потока; offset должен быть равен нулю (все остальные значения не поддерживаются).
Возвращает новую абсолютную позицию как непрозрачное число.
Добавлено в версии 3.1: Константы
SEEK_*
.
-
tell
()¶ Возвращает текущее положение потока как непрозрачное число. Число обычно не представляет число байтов в базовом двоичном хранилище.
-
write
(s)¶ Записать строка s в поток и возвращает количество записанных символов.
-
-
class
io.
TextIOWrapper
(buffer, encoding=None, errors=None, newline=None, line_buffering=False, write_through=False)¶ Буферизованный текстовый поток через двоичный поток
BufferedIOBase
. Он наследуетTextIOBase
.encoding задает имя кодировка, с которым будет декодирован или кодированный поток. По умолчанию используется значение
locale.getpreferredencoding(False)
.errors является необязательным строка, который определяет, как должны обрабатываться ошибки кодировка и декодирования. Передайте
'strict'
, чтобы поднять исключениеValueError
, если есть ошибка кодировка (дефолтNone
имеет тот же эффект), или проход'ignore'
, чтобы проигнорировать ошибки. (Обратите внимание, что игнорирование ошибок кодировка может привести к потере данных.)'replace'
вызывает вставку маркера замены (например,'?'
) в случае неправильного формирования данных.'backslashreplace'
приводит к замене неверно сформированных данных последовательностью побега с обратной отсечкой. Сочиняя,'xmlcharrefreplace'
(заменяют соответствующей ссылкой XML символ) или'namereplace'
(заменяют последовательностями побега\N{...}
) могут быть используемый. Любое другое имя обработки ошибок, зарегистрированное вcodecs.register_error()
, также является допустимым.newline управляет обработкой окончаний строк. Это могут быть
None
,''
,'\n'
,'\r'
и'\r\n'
. Работает следующим образом:- При чтении входных данных из потока, если newline является
None
, включается режим универсальный символ новой строки. Линии во входе могут закончиться в'\n'
,'\r'
или'\r\n'
, и они переведены на'\n'
перед стать возвращенный посетителю. Если это -''
, универсальный newlines режим включен, но окончания линии - возвращенный непереведенному посетителю. Если у этого есть какой-либо из других юридических значения, входные линии только закончены данным строка, и окончание линии - возвращенный непереведенному посетителю. - При записи выходных данных в поток, если newline является
None
, любые записанные символы'\n'
переводятся в системный разделитель строк по умолчанию,os.linesep
. Если newline является''
или'\n'
, перевод не выполняется. Если newline является какой-либо из других юридических значения, любые написанные символы'\n'
переводятся на данный строка.
Если line_buffering является
True
, тоflush()
подразумевается, когда вызов для записи содержит новую строку символ или каретку возвращает.Если write_through является
True
, вызовыwrite()
гарантированно не буферизуются: любые данные, записанные на объектеTextIOWrapper
, немедленно обрабатываются в лежащем в их основе двоичном buffer.Изменено в версии 3.3: Аргумент write_through добавлен.
Изменено в версии 3.3: Дефолтом encoding является теперь
locale.getpreferredencoding(False)
вместоlocale.getpreferredencoding()
. Не изменяйтесь временный место действия кодировка, используяlocale.setlocale()
, используйте текущее место действия, кодировка вместо пользователя предпочел кодировка.TextIOWrapper
предоставляет этих членов в дополнение к членамTextIOBase
и его родителей:-
line_buffering
¶ Активизирована ли буферизация строк.
-
write_through
¶ Передается ли запись немедленно в базовый двоичный буфер.
Добавлено в версии 3.7.
-
reconfigure
(*[, encoding][, errors][, newline][, line_buffering][, write_through])¶ Перенастроите этот текстовый поток с помощью новых параметров для encoding, errors, newline, line_buffering и write_through.
Параметры, не определенные, держат параметры настройки в курсе, кроме
errors='strict'
используемый, когда encoding определен, но errors не определен.Невозможно изменить кодировка или новую строку, если некоторые данные уже считаны из потока. С другой стороны, возможно изменение кодировка после записи.
Этот метод выполняет неявную очистку потока перед установкой новых параметров.
Добавлено в версии 3.7.
- При чтении входных данных из потока, если newline является
-
class
io.
StringIO
(initial_value='', newline='\n')¶ Поток в памяти для текста I/O. Текстовый буфер отбрасывается при вызове метода
close()
.Начальный значение буфера может быть установлен, обеспечив initial_value. Если перевод новой строки включен, то новые строки будут кодированный как бы по
write()
. Поток позиционируется в начале буфера.Аргумент newline работает как аргумент
TextIOWrapper
. По умолчанию в качестве концов строк используются только символы\n
и перевод новых строк не выполняется. Если newline установлен вNone
, newlines написаны как\n
на всех платформах, но универсальная расшифровка newline все еще выполнена, читая.StringIO
предоставляет этот метод в дополнение к методам отTextIOBase
и его родителей:-
getvalue
()¶ Возвращает
str
, содержащий все содержимое буфера. Новые строки декодируются как бы поread()
, хотя положение потока не изменяется.
Использование в качестве примера:
import io output = io.StringIO() output.write('First line.\n') print('Second line.', file=output) # Получить содержимое файла - это будет # 'Первая строка.\nВторая строка.\n' contents = output.getvalue() # Закрытие объекта и удаление буфера памяти. # getvalue() вызовет исключение. output.close()
-
-
class
io.
IncrementalNewlineDecoder
¶ Кодировка помощника, который расшифровывает newlines для режима универсальный символ новой строки. Он наследует
codecs.IncrementalDecoder
.
Исполнение¶
В этом разделе рассматриваются выполнение обеспеченных конкретных внедрений I/O.
Бинарный I/O¶
Читая и сочиняя только большой чанки данных, даже когда пользователь просит единственный байт, буферизованный I/O скрывает любую неэффективность в запросе и выполнении небуферизированного распорядка операционной системы I/O. Выгода зависит от OS и вида I/O, который выполнен. Например, на некоторых современных Ose, таких как Linux, небуферизированный диск I/O может быть с такой скоростью, как буферизован I/O. Итог, однако, то, который буферизовал предсказуемое исполнение предложений I/O независимо от платформы и отступающего устройства. Поэтому почти всегда предпочтительно использовать буферизованные I/O, а не небуферизованные I/O для двоичных данных.
Текстовый I/O¶
Текстовый I/O по двойному месту хранения (такому как файл) значительно
медленнее, чем двоичный I/O по тому же месту хранения, потому что это
требует преобразований между Юникодом и двоичными данными, используя символ
кодировка. Это может стать заметной обработкой огромных объемов текстовых
данных, таких как большие файлы журнала. Также TextIOWrapper.tell()
и TextIOWrapper.seek()
- оба
довольно медленные из-за алгоритма реконструкции используемый.
StringIO
, однако, является собственным контейнером юникод в памяти и будет
демонстрировать скорость, аналогичную скорости BytesIO
.
Мультипронизывание¶
Объекты FileIO
поток-безопасны до такой степени, что операционная
система звонит (такие как read(2)
под Unix), они обертывают, поток-безопасны также.
Двоичные буферизированные объекты (сущности BufferedReader
, BufferedWriter
,
BufferedRandom
и BufferedRWPair
) защищают свои внутренние структуры с помощью
блокировки; поэтому можно с уверенностью звонить им сразу из нескольких потоки.
TextIOWrapper
объекты не являются потокобезопасной.
Повторная входимость¶
Двоичные буферизированные объекты (сущности из BufferedReader
, BufferedWriter
,
BufferedRandom
и BufferedRWPair
) не поступают повторно. В то время как требований
reentrant не произойдет в нормальных ситуациях, они могут явиться результатом
выполнения I/O в обработчике signal
. Если поток пытается
повторно войти в буферизированный объект, к которому он уже получает доступ,
RuntimeError
поднят. Обратите внимание, что это не запрещает другому поток
входить в буферизованный объект.
Вышеупомянутое неявно распространяется на текстовые файлы, так как функция
open()
обернет буферизированный объект в TextIOWrapper
. Это включает
стандартные потоки и, следовательно, влияет также на встроенную функцию print()
.