Главная страница
Навигация по странице:

  • Атрибут Описание

  • Буферизованный ввод-вывод двоичных данных

  • BufferedReader( raw [, buffer_size ])

  • Метод Описание

  • BufferedRWPair( reader , writer [, buffer_size [, max_buffer_size ]])

  • BufferedRandom( raw [, buffer_size [, max_buffer_size ]])

  • Ввод-вывод текстовой информации

  • TextIOWrapper( buffered [, encoding [, errors [, newline [, line_buffering ]]]])

  • StringIO([ initial [, encoding [, errors [, newline ]]]])

  • Функция open() Модуль io определяет следующую функцию open(), которая является пол- ным аналогом встроенной функции open() в Python 3: 444

  • Абстрактные базовые классы

  • Абстрактный класс Описание

  • справочник по Python. мм isbn 9785932861578 9 785932 861578


    Скачать 4.21 Mb.
    Названиемм isbn 9785932861578 9 785932 861578
    Анкорсправочник по Python
    Дата08.05.2022
    Размер4.21 Mb.
    Формат файлаpdf
    Имя файлаBizli_Python-Podrobnyy-spravochnik.440222.pdf
    ТипСправочник
    #518195
    страница35 из 82
    1   ...   31   32   33   34   35   36   37   38   ...   82
    FileIO(name [, mode [, closefd]])
    Возвращает объект, реализующий низкоуровневые операции ввода-вывода над файлом или дескриптором файла. В аргументе name передается имя файла или дескриптор файла, аналогичный тому, что возвращается функ- цией os.open() или методом fileno() объектов файлов. В аргументе mode передается одно из значений: ‘r’ (по умолчанию); ‘w’ или ‘a’, соответствую- щие режимам открытия файла для чтения, для записи или для добавления в конец. В аргумент mode можно добавить символ ‘+’, который определяет режим открытия для изменения, когда поддерживаются обе операции – чтения и записи. В аргументе closefd передается флаг, который определя- ет, должен ли метод close() действительно закрывать сам файл. По умол-
    (продолжение)

    Модуль io
    439
    чанию получает значение True, но его можно установить в значение False, если объект класса FileIO используется как обертка вокруг файла, откры- того в другом месте программы. Если в аргументе name было передано имя файла, объект файла открывается с помощью системного вызова open().
    Этот объект не поддерживает буферизацию данных и интерпретирует их как простые строки байтов. Экземпляр f класса FileIO может выполнять все основные операции ввода-вывода, описанные выше, и дополнительно обладает следующими атрибутами и методами:
    Атрибут
    Описание
    f.closefd
    Флаг, указывающий – будет ли закрыт дескриптор файла методом f.close() (только для чтения).
    f.mode
    Режим, выбранный при открытии файла (только для чтения).
    f.name
    Имя файла (только для чтения).
    f.read([size])
    Читает не более size байтов с помощью единственного обраще- ния к системному вызову. Если аргумент size не указан, воз- вращает максимально возможное число байтов, прочитанных методом f.readall(). Эта операция может возвращать меньшее число байтов, чем указано в аргументе size, поэтому для про- верки всегда следует использовать функцию len(). В неблоки- рующем режиме возвращает None, если данные недоступны.
    f.readall()
    Читает максимально возможное число байтов и возвращает их в виде одной строки. По достижении конца файла возвра- щает пустую строку. В неблокирующем режиме возвращает объем данных, которые доступны на данный момент.
    f.write(bytes)
    Записывает строку байтов или массив байтов bytes в f, с по- мощью единственного обращения к системному вызову. Воз- вращает число байтов, которое было фактически записано.
    Это число может быть меньше, чем было передано в аргументе
    bytes
    Важно отметить, что объекты класса FileIO находятся на самом низком уровне, образуя тонкую прослойку над системными вызовами, такими как read() и write(). В частности, при использовании этих объектов необ- ходимо тщательно проверять возвращаемые значения, чтобы убедиться, что операции f.read() или f.write() прочитали и записали все данные. Для изменения низкоуровневых аспектов ввода-вывода, таких как блокировка файлов, поведение механизма блокировок и так далее, можно использо- вать модуль fcntl.
    Объекты класса FileIO не должны использоваться для работы с данными, имеющими построчное представление, такими как текст. Хотя объекты и обладают методами, такими как f.readline() и f.readlines(), но они уна- следованы от класса IOBase, где они реализованы исключительно на язы- ке Python, и читают данные по одному байту за раз, используя операцию
    f.read()
    . Получающаяся в результате производительность просто ужасна.
    Например, в Python 2.6 метод f.readline()объекта f класса FileIO работает

    440
    Глава 19. Службы операционной системы более чем в 750 раз медленнее, чем метод f.readline() стандартного объекта файла, созданного функцией open().
    Буферизованный ввод-вывод двоичных данных
    Уровень буферизованного ввода-вывода содержит коллекцию объектов файлов, которые читают и записывают простые двоичные данные, но с бу- феризацией в оперативной памяти. При создании этим объектам должны передаваться объекты файлов, реализующие низкоуровневые операции ввода-вывода, такие как объекты класса FileIO, описанного в предыдущем разделе. Все классы, описываемые в этом разделе, являются производны- ми от класса BufferedIOBase.
    BufferedReader(raw [, buffer_size])
    Возвращает объект класса BufferedReader, реализующий буферизованную операцию чтения двоичных данных из файла, указанного в аргументе raw.
    Аргумент buffer_size определяет размер буфера в байтах. Если этот аргу- мент опущен, используется значение по умолчанию DEFAULT_BUFFER_SIZE
    (8192 байтов на момент написания этих строк). Экземпляр f класса Buff- eredReader поддерживает все операции, реализованные классом IOBase, и дополнительно предоставляет реализацию следующих операций:
    Метод
    Описание
    f.peek([n])
    Возвращает до n байтов из буфера ввода-вывода. Указатель теку- щей позиции в файле при этом не перемещается. Если аргумент
    n
    не указан, возвращает единственный байт. В случае необходи- мости выполняется операция чтения из файла, чтобы заполнить буфер, если он пустой. Этот метод никогда не возвращает число байтов больше, чем текущий размер буфера, поэтому возвращае- мый результат может содержать меньше байтов, чем было запро- шено в аргументе n.
    f.read([n])
    Читает n байтов и возвращает их в виде строки байтов. При вы- зове без аргумента n будут прочитаны и возвращены все имею- щиеся данные (до конца файла). Если файл открыт в неблоки- рующем режиме, будут возвращены все доступные данные. При чтении файла в неблокирующем режиме, когда нет доступных данных, возбуждается исключение
    BlockingIOError
    .
    f.read1([n])
    Читает до n байтов с помощью единственного обращения к си- стемному вызову и возвращает их в виде строки байтов. Если какие-либо данные уже были загружены в буфер, они извлека- ются из буфера. В противном случае производится единствен- ный вызов методаread() низкоуровневого объекта файла. В от- личие от метода f.read(), эта операция может возвращать меньше данных, чем было запрошено, даже если еще не был достигнут конец файла.
    f.readinto(b)
    Читает len(b) байтов из файла в существующий объект b типа bytearray
    . Возвращает фактическое количество прочитанных байтов. При чтении файла в неблокирующем режиме, когда нет доступных данных, возбуждается исключение BlockingIOError.

    Модуль io
    441
    BufferedWriter(raw [, buffer_size [, max_buffer_size]])
    Возвращает объект класса BufferedWriter, реализующий буферизованную операцию записи двоичных данных в файл, указанный в аргументе raw.
    Аргумент buffer_size определяет количество байтов, которые можно со- хранить в буфере, прежде чем данные будут фактически записаны в поток ввода-вывода. По умолчанию используется значение DEFAULT_BUFFER_SIZE.
    В аргументе max_buffer_size передается максимальный размер буфера для хранения выходных данных, когда запись выполняется в неблокирующем режиме, который по умолчанию равен удвоенному значению buffer_size.
    Это значение должно быть больше, чтобы позволить продолжать запись данных, пока операционная система выполняет запись предыдущих дан- ных из буфера в поток ввода-вывода. Экземпляр f класса BufferedWriter под- держивает следующие операции:
    Метод
    Описание
    f.flush()
    Записывает все содержимое буфера в поток ввода-вывода.
    Если вывод осуществляется в неблокирующем режиме и выполнение операции блокируется, возбуждает исключе- ние BlockingIOError (например, если в текущий момент поток не может принять новую порцию данных).
    f.write(bytes)
    Записывает строку bytes в поток ввода-вывода и возвращает фактическое количество записанных байтов. Если вывод осуществляется в неблокирующем режиме и выполнение операции блокируется, возбуждает исключение BlockingIO-
    Error
    .
    BufferedRWPair(reader, writer [, buffer_size [, max_buffer_size]])
    Возвращает объект класса BufferedRWPair, реализующий буферизованные операции чтения и записи двоичных данных из/в поток ввода-вывода.
    В аргументе reader передается низкоуровневый объект файла, поддержи- вающий операцию чтения, а в аргументе writer – низкоуровневый объект файла, поддерживающий операцию записи. Это могут быть разные файлы, что может оказаться удобным при организации некоторых видов взаимо- действий с помощью каналов и сокетов. Аргументы buffer_size и max_buf-
    _buf-
    buf-
    fer_size
    имеют тот же смысл, что и в функции BufferedWriter(). Экземпляры класса BufferedRWPair поддерживают все операции, предоставляемые объ- ектами классов BufferedReader и BufferedWriter.
    BufferedRandom(raw [, buffer_size [, max_buffer_size]])
    Возвращает объект класса BufferedRandom, реализующий буферизованные операции чтения и записи двоичных данных из/в поток ввода-вывода, ко- торый поддерживает возможность произвольного доступа (то есть поддер- живает операцию перемещения указателя текущей позиции). В аргументе
    raw
    должен передаваться низкоуровневый объект файла, поддерживаю- щий операции чтения, записи и позиционирования. Аргументы buffer_size и max_buffer_size имеют тот же смысл, что и в функции BufferedWriter().
    Экземпляры класса BufferedRandom поддерживают все операции, предостав- ляемые объектами классов BufferedReader и BufferedWriter.

    442
    Глава 19. Службы операционной системы
    BytesIO([bytes])
    Ф
    айл, размещаемый в памяти и реализующий функциональность буфери- зованного потока ввода-вывода. В аргументе bytes передается строка бай- тов с начальным содержимым файла. Экземпляр b класса BytesIO поддер- живает все операции, предоставляемые объектами классов BufferedReader и BufferedWriter. Кроме того, он реализует метод b.getvalue(), который воз- вращает текущее содержимое файла в виде строки байтов.
    Как и объекты класса FileIO, объекты всех классов, описанных в этом раз- деле, не должны использоваться для работы с данными, имеющими по- строчное представление, такими как текст. Хотя наличие механизма бу- феризации немного улучшает ситуацию с производительностью, тем не ме- нее она все еще оставляет желать лучшего (например, в Python 2.6 чтение строк выполняется более чем в 50 раз медленнее, чем при использовании объекта файла, созданного функцией open()). Кроме того, из-за наличия внутренней буферизации следует помнить о необходимости выполнять операцию flush() при записи данных. Например, если в программе исполь- при записи данных. Например, если в программе исполь- записи данных. Например, если в программе исполь- записи данных. Например, если в программе исполь- данных. Например, если в программе исполь- данных. Например, если в программе исполь-
    . Например, если в программе исполь-
    Например, если в программе исполь- зуется метод f.seek() для перемещения указателя текущей позиции в новое местоположение, предварительно необходимо вызвать метод f.flush(), что- бы вытолкнуть данные, имеющиеся в буфере.
    Кроме того, имейте в виду, что аргументы, определяющие размер буфера, устанавливают ограничение лишь для операций записи, что не обязатель- но является ограничением для использования внутренних ресурсов. На- пример, когда вызывается метод f.write(data) буферизованного файла f, все байты в строке data сначала будут скопированы во внутренние буферы.
    Если аргумент data представляет очень большой массив байтов, то его ко- пирование повлечет за собой существенный расход памяти в программе.
    Поэтому запись данных больших объемов лучше выполнять порциями разумного размера, а не все сразу, одним вызовом операции write(). Следу- ет также отметить, что модуль io является достаточно новым, поэтому его поведение в будущих версиях может немного измениться.
    Ввод-вывод текстовой информации
    Уровень ввода-вывода текстовой информации используется для работы с текстовыми данными, имеющими построчное представление. Классы, объявленные в этом разделе, построены на базе буферизованных потоков ввода-вывода и добавляют возможность работы с текстовыми строками, а также кодирование и декодирование символов Юникода. Все классы это- го уровня являются производными от класса TextIOBase.
    TextIOWrapper(buffered [, encoding [, errors [, newline [, line_buffering]]]])
    Класс буферизованного текстового потока. В аргументе buffered передается объект буферизованного потока ввода-вывода, один из тех, что был описан в предыдущем разделе. В аргументе encoding передается строка с названи- передается строка с названи- строка с названи- строка с названи- с названи- с названи- названи- названи- ем кодировки, такая как ‘ascii’ или ‘utf-8’. Аргумент errors определяет политику обработки ошибок кодирования символов Юникода и по умол- чанию имеет значение ‘strict’ (описание этого аргумента приводится

    Модуль io
    443
    в главе 9 «Ввод и вывод»). В аргументе newline передается последователь- ность символов, представляющая признак конца строки, который может принимать значения None, ‘’, ‘\n’, ‘\r’ или ‘\r\n’. Если указано значение
    None
    , включается режим использования универсального символа перево- да строки, когда при чтении любые символы конца строки преобразуются в символ ‘\n’, а при записи символ перевода строки замещается значением os.linesep
    . Если в аргументе newline передается любое другое значение, при записи все символы ‘\n’ будут замещаться этим значением. В аргументе
    line_buffering
    передается флаг, который определяет, будет ли выполняться операция flush() по окончании любой операции записи, которая выводит символ перевода строки. По умолчанию имеет значение False. Экземпляр
    f
    класса TextIOWrapper поддерживает все операции, реализованные классом
    IOBase
    , и дополнительно предоставляет реализацию следующих операций:
    Метод
    Описание
    f.encoding
    Имя используемой кодировки.
    f.errors
    Политика ошибок кодирования и декодирования.
    f.line_buffering
    Флаг, определяющий способ буферизации строк.
    f.newlines
    None
    , строка или кортеж со всеми различными формами преобразования символов перевода строки.
    f.read([n])
    Читает до n символов из потока и возвращает их в виде строки. При вызове без аргумента n прочитает все доступ- ные данные до конца файла. По достижении конца файла вернет пустую строку. Возвращаемая строка декодируется в соответствии с именем кодировки в атрибуте f.encoding.
    f.readline([limit])
    Прочитает единственную строку текста и вернет ее. По до- стижении конца файла вернет пустую строку. Аргумент
    limit
    определяет максимальное число байтов, какое может быть прочитано.
    f.write(s)
    Записывает строку s в поток. Перед записью строка ко- дируется в соответствии с именем кодировки в атрибуте
    f.encoding
    StringIO([initial [, encoding [, errors [, newline]]]])
    Возвращает объект файла, размещаемого в памяти, обладающий теми же особенностями, что и объект класса TextIOWrapper. В аргументе initial пе- пе- редается строка с начальным содержимым файла. Остальные аргументы имеют тот же смысл, что и в функции TextIOWrapper(). Экземпляр s класса
    StringIO
    поддерживает все обычные операции над файлами и дополнитель- но реализует метод s.getvalue(), который возвращает текущее содержимое буфера в памяти.
    Функция open()
    Модуль io определяет следующую функцию open(), которая является пол- ным аналогом встроенной функции open() в Python 3:

    444
    Глава 19. Службы операционной системы
    open(file [, mode [, buffering [, encoding [, errors [, newline [, closefd]]]]]])
    Открывает файл file и возвращает соответствующий ему объект ввода- вывода. В аргументе file может передаваться строка с именем файла или целочисленный дескриптор потока ввода-вывода, который уже был от- крыт. Результатом вызова этой функции является объект одного из классов ввода-вывода, объявленных в модуле io, в зависимости от значений аргу- ментов mode и buffering. Если в аргументе mode указывается один из тексто- вых режимов, таких как ‘r’, ‘w’, ‘a’ или ‘U’, возвращается экземпляр класса
    TextIOWrapper
    . Если в аргументе mode указывается двоичный режим, такой как ‘rb’ или ‘wb’, тип результата зависит от значения аргумента buffering.
    Если аргумент buffering имеет значение 0, возвращается экземпляр класса
    FileIO
    , реализующий низкоуровневый ввод-вывод без буферизации. Если аргумент buffering имеет любое другое значение, возвращается экземпляр класса BufferReader, BufferedWriter или BufferedRandom, в зависимости от зна- чения в аргументе mode. Аргументы encoding, errors и newline учитываются, только когда файл открывается в текстовом режиме; они передаются кон- структору класса TextIOWrapper. Значение аргумента closefd учитывается, только если аргумент file представляет собой целочисленный дескриптор, и передается конструктору класса FileIO.
    Абстрактные базовые классы
    Модуль io объявляет следующие абстрактные базовые классы, которые можно использовать для проверки типов и объявления новых классов ввода-вывода:
    Абстрактный класс Описание
    IOBase
    Базовый класс для всех классов ввода-вывода.
    RawIOBase
    Базовый класс для объектов, поддерживающих низкоуров- невый ввод-вывод двоичных данных. Является производ- ным от класса IOBase.
    BufferedIOBase
    Базовый класс для объектов, поддерживающих буферизо- ванный ввод-вывод двоичных данных. Является производ- ным от класса IOBase.
    TextIOBase
    Базовый класс для объектов, поддерживающих ввод-вывод текстовых данных. Является производным от класса
    IOBase
    Программистам редко приходится работать с этими классами непосред- ственно. Подробное описание их использования можно найти в электрон- ной документации.
    1   ...   31   32   33   34   35   36   37   38   ...   82


    написать администратору сайта