Spec-Zone.ru › Python 3.5

fileinput — Итерация по строкам из нескольких входных потоков

Исходный код: Lib/fileinput.py

Этот модуль реализует вспомогательный класс и функции для быстрого цикла по стандартному вводу или списку файлов. Если вам нужно просто прочитать или записать один файл, см. open().

Типичное использование:

import fileinput
for line in fileinput.input():
    process(line)

Это итерирует по строкам всех файлов, перечисленных в sys.argv[1:], по умолчанию используя sys.stdin, если список пуст. Если имя файла '-', оно также заменяется на sys.stdin. Чтобы указать другой список имён файлов, передайте его в качестве первого аргумента функции input(). Также допускается указание одного имени файла.

Все файлы открываются в текстовом режиме по умолчанию, но вы можете переопределить это, указав параметр mode в вызове функции input() или FileInput. Если при открытии или чтении файла возникает ошибка ввода-вывода, возбуждается исключение OSError.

Изменено в версии 3.3: Исключение IOError ранее использовалось; теперь это псевдоним для OSError.

Если sys.stdin используется более одного раза, повторное использование вернёт пустые строки, за исключением, возможно, интерактивного использования или если оно было явно сброшено (например, с помощью sys.stdin.seek(0)).

Пустые файлы открываются и немедленно закрываются; их присутствие в списке имён файлов заметно только тогда, когда последний открытый файл пуст.

Строки возвращаются с любыми символами новой строки, что означает, что последняя строка в файле может быть без них.

Вы можете контролировать, как открываются файлы, предоставив функцию открытия через параметр openhook для функций fileinput.input() или FileInput(). Функция должна принимать два аргумента, filename и mode, и возвращать соответствующий объект файла.

Следующая функция является основным интерфейсом этого модуля:

fileinput.input(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)

Создаёт экземпляр класса FileInput. Экземпляр будет использоваться как глобальное состояние для функций этого модуля, а также возвращается для использования во время итерации. Параметры этой функции будут переданы конструктору класса FileInput.

Экземпляр FileInput может использоваться как менеджер контекста в инструкции with. В этом примере input закрывается после выхода из инструкции with, даже если произошла ошибка:

with fileinput.input(files=('spam.txt', 'eggs.txt')) as f:
    for line in f:
        process(line)

Изменено в версии 3.2: Может использоваться как менеджер контекста.

Изменено в версии 3.5.2: Параметр bufsize больше не используется.

Следующие функции используют глобальное состояние, созданное функцией fileinput.input(); если активное состояние отсутствует, возбуждается исключение RuntimeError.

fileinput.filename()

Возвращает имя файла, который в данный момент читается. Перед чтением первой строки возвращает None.

fileinput.fileno()

Возвращает целое число «дескриптор файла» для текущего файла. Когда файл не открыт (перед первой строкой и между файлами), возвращает -1.

fileinput.lineno()

Возвращает кумулятивный номер строки для строки, которая была только что прочитана. Перед чтением первой строки возвращает 0. После чтения последней строки последнего файла возвращает номер строки этой строки.

fileinput.filelineno()

Возвращает номер строки в текущем файле. Перед чтением первой строки возвращает 0. После чтения последней строки последнего файла возвращает номер строки в этом файле.

fileinput.isfirstline()

Возвращает true, если только что прочитанная строка является первой строкой своего файла, иначе возвращает false.

fileinput.isstdin()

Возвращает true, если последняя строка была прочитана из sys.stdin, иначе возвращает false.

fileinput.nextfile()

Закрывает текущий файл, чтобы при следующей итерации первая строка читалась из следующего файла (если таковой имеется); строки, которые не были прочитаны из файла, не учитываются в общее количество строк. Имя файла не изменяется до чтения первой строки следующего файла. Перед чтением первой строки функция не имеет эффекта; она не может быть использована для пропуска первого файла. После чтения последней строки последнего файла функция не имеет эффекта.

fileinput.close()

Закрывает последовательность.

Класс, реализующий поведение последовательности, предоставляемое модулем, также доступен для наследования:

class fileinput.FileInput(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)

Класс FileInput является реализацией; его методы filename(), fileno(), lineno(), filelineno(), isfirstline(), isstdin(), nextfile() и close() соответствуют функциям с таким же именем в модуле. Кроме того, он имеет метод readline(), который возвращает следующую строку ввода, и метод __getitem__(), который реализует поведение последовательности. К последовательности необходимо обращаться в строго последовательном порядке; случайный доступ и readline() нельзя смешивать.

С параметром mode вы можете указать режим файла, который будет передан в open(). Он должен быть одним из 'r', 'rU', 'U' и 'rb'.

Функция openhook, если задана, должна принимать два аргумента, filename и mode, и возвращать соответствующий открытый объект файла. Вы не можете использовать inplace и openhook вместе.

Экземпляр FileInput может использоваться как менеджер контекста в инструкции with. В этом примере input закрывается после выхода из инструкции with, даже если произошла ошибка:

with FileInput(files=('spam.txt', 'eggs.txt')) as input:
    process(input)

Изменено в версии 3.2: Может использоваться как менеджер контекста.

Устарело начиная с версии 3.4: Режимы 'rU' и 'U'.

Изменено в версии 3.5.2: Параметр bufsize больше не используется.

Необязательное фильтрация на месте: если ключевой аргумент inplace=True передаётся в функцию fileinput.input() или в конструктор класса FileInput, файл перемещается в резервную копию, и стандартный вывод направляется в входной файл (если файл с таким же именем, как резервная копия, уже существует, он будет заменён без предупреждения). Это позволяет создавать фильтр, который перезаписывает входной файл на месте. Если параметр backup задан (обычно как backup='.<some extension>'), он указывает расширение для резервного файла, и резервный файл остаётся; по умолчанию расширение '.bak', и оно удаляется при закрытии выходного файла. Фильтрация на месте отключена при чтении из стандартного ввода.

Два следующих обработчика открытия предоставляются этим модулем:

fileinput.hook_compressed(filename, mode)

Прозрачно открывает файлы, сжатые gzip и bzip2 (определяемые по расширениям '.gz' и '.bz2') с использованием модулей gzip и bz2. Если расширение файла не '.gz' или '.bz2', файл открывается стандартным образом (т.е. с помощью open() без разархивирования).

Пример использования: fi = fileinput.FileInput(openhook=fileinput.hook_compressed)

fileinput.hook_encoded(encoding)

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

Пример использования: fi = fileinput.FileInput(openhook=fileinput.hook_encoded("iso-8859-1"))

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/fileinput.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API