Spec-Zone.ru › Python 3.8

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

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

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

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

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

Это итерирует по строкам всех файлов, перечисленных в sys.argv[1:], по умолчанию используя sys.stdin, если список пустой. Если имя файла '-', оно также заменяется на sys.stdin, и необязательные аргументы mode и openhook игнорируются. Чтобы указать другой список имён файлов, передайте его в качестве первого аргумента функции 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='', *, 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.8: Ключевые параметры mode и openhook теперь являются только ключевыми.

Следующие функции используют глобальное состояние, созданное функцией 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='', *, 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.8: Поддержка метода __getitem__() устарела.

Изменено в версии 3.8: Ключевые параметры mode и openhook теперь являются только ключевыми.

Необязательное фильтрация на месте: если ключевой аргумент 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, errors=None)

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

Пример использования: fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8", "surrogateescape"))

Изменено в версии 3.6: Добавлен необязательный параметр errors.

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

Spec-Zone.ru

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