import io fp = io.IOBase()
Абстрактный базовый класс io.IOBase()
- это класс для всех классов ввода/вывода. Не имеет публичного конструктора.
Класс io.IOBase()
предоставляет пустые абстрактные реализации для многих методов, которые выборочно могут переопределять производные классы. Реализация по умолчанию представляют файл, который нельзя прочитать, записать или просмотреть.
Несмотря на то, что IOBase
не объявляет методы read()
или write()
потому что их сигнатуры будут отличаться, реализации и клиенты должны рассматривать эти методы как часть интерфейса. Кроме того, реализации могут вызывать исключения ValueError
или UnsupportedOperation
при вызове операций, которые они не поддерживают.
Основной тип, используемый для двоичных данных, считываемых из файла или записываемых в него - bytes
. Другие байтоподобные объекты также принимаются в качестве аргументов метода. Строки определяются немного по-другому в зависимости от того, является ли поток двоичным (выдающим байты) или текстовым (выдающим символьные строки). Смотрите readline() ниже.
Текстовые классы ввода/вывода работают с данными типа str
.
Обратите внимание, что вызов любого метода или даже запроса в закрытом потоке не определен. В этом случае реализации могут поднимать исключения ValueError
.
Класс IOBase
и его подклассы поддерживает протокол итератора, это означает, что объект IOBase
может быть повторен, отдавая строки в поток. Строки определяются немного по-разному в зависимости от того, является ли поток двоичным, дающим байты или текстовым, дающим символьные строки. Смотри readline()
ниже.
Класс IOBase
также является менеджером контекста и следовательно поддерживает инструкцию with
. В примере ниже, файл закрывается после завершения блока операторов в инструкции with
, даже если возникает исключение:
with open('spam.txt', 'w') as file: file.write('Spam and eggs!')
IOBase
:IOBase.close()
:Метод IOBase.close()
сбрасывает буфер в файл и закрывает поток. Этот метод не действует, если файл уже закрыт. После закрытия файла любая операция с файлом, например чтение или запись вызовет a исключение ValueError
.
Для удобства можно вызывать этот метод более одного раза, но только первый вызов будет иметь эффект.
IOBase.closed
:Атрибут IOBase.closed
проверяет закрыт ли поток и возвращает True
если он закрыт.
IOBase.fileno()
:Метод IOBase.fileno()
возвращает целое число основной файловый дескриптор потока, если он существует. Возникает исключение OSError
, если объект IO
не использует дескриптор файла.
IOBase.flush()
:Метод IOBase.flush()
очищает буфер записи потока, если это применимо. Метод ничего не делает для не блокирующих потоков и потоков доступных только для чтения.
IOBase.isatty()
:Метод IOBase.isatty()
возвращает True
если поток является интерактивным, т.е. подключен к терминалу (tty устройству).
IOBase.readable()
:Метод IOBase.readable()
возвращает, True
если поток может быть прочитан. Если False
, метод IOBase.read()
поднимет исключение OSError
.
IOBase.readline(size=-1, /)
:Метод IOBase.readline()
прочитает и вернет одну строку из потока. Если указан размер, то будет прочитано не более size
байт.
Окончанием строки для двоичных файлов всегда является b''
. Для распознавания конечных элементов/символов строки в текстовых файлах может быть использован аргумент newline
функции open()
.
IOBase.readlines(size=-1, /)
:Метод IOBase.readlines()
прочитает и вернет список строк из потока. Аргумент size
может быть указан для контроля количества прочитанных строк, прочитано будет не более size
строк, если общий размер (в байтах или символах) всех строк превышает size
.
Обратите внимание, что в классе уже возможно выполнять итерации по объектам файлов, используя for line in file:
без вызова file.readlines()
.
IOBase.seek(offset, whence=SEEK_SET)
:Метод IOBase.seek()
изменяет позицию потока на заданное смещение в байтах offset
. Смещение интерпретируется относительно позиции, обозначенной whence
. Аргумент whence
имеет значение по умолчанию равное SEEK_SET
.
Возможные значения whence
:
SEEK_SET
или 0 - начало потока (по умолчанию). Смещение должно быть нулевым или положительным.SEEK_CUR
или 1 - текущая позиция потока. Смещение может быть отрицательным.SEEK_END
или 2 - конец потока. Смещение обычно отрицательное.Метод IOBase.seek()
вернет новую абсолютную позицию.
IOBase.seekable()
:Метод IOBase.seekable()
вернет True
если поток поддерживает произвольный доступ. Если False
, то методы seek()
, tell()
и truncate()
поднимут исключение OSError
.
IOBase.tell()
:Метод IOBase.tell()
вернет текущую позицию потока.
IOBase.truncate(size=None)
:Метод IOBase.truncate()
изменит размер потока до заданного размера в байтах или текущей позиции, если размер не указан. Текущая позиция потока не изменяется. Изменение размера может расширить или уменьшить текущий файл. В случае расширения, содержимое новой файловой области зависит от платформы. В большинстве систем дополнительные байты заполнены нулями.
Метод IOBase.truncate()
вернет новый размер файла.
IOBase.writable()
:Метод IOBase.writable()
вернет True
если поток поддерживает запись. Если False
, то методы write()
и truncate()
поднимут исключение OSError
.
IOBase.writelines(lines)
:Метод IOBase.writelines()
запишет список строк lines
в поток. Разделители строк не добавляются, поэтому обычно для каждой из строк необходимо проверять наличие разделителя строк.
IOBase.__del__( )
:Метод IOBase.__del__()
уничтожает объект потока. Класс IOBase
обеспечивает реализацию этого метода по умолчанию, которая вызывает метод экземпляра IOBase.close()
.