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.
Если 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