fileinput — Перебор строк из нескольких входных потоков
Исходный код: Lib/fileinput.py
Этот модуль реализует вспомогательный класс и функции для быстрого перебора стандартного ввода или списка файлов. Если вам нужно только прочитать или записать один файл, см. open().
Типичное использование:
import fileinput
for line in fileinput.input(encoding="utf-8"):
process(line)
Это итерирует по строкам всех файлов, перечисленных в sys.argv[1:], по умолчанию используя sys.stdin если список пуст. Если имя файла '-', оно также заменяется на sys.stdin, и необязательные аргументы mode и openhook игнорируются. Чтобы указать другой список имён файлов, передайте его в качестве первого аргумента функции input(). Также допускается передача одного имени файла.
По умолчанию все файлы открываются в текстовом режиме, но вы можете изменить это, указав параметр mode в вызове функций input() или FileInput. Если при открытии или чтении файла возникает ошибка ввода-вывода, генерируется исключение OSError.
Если sys.stdin используется более одного раза, повторные вызовы вернут пустые строки, за исключением, возможно, интерактивного использования или если оно было явно сброшено (например, используя sys.stdin.seek(0)).
Пустые файлы открываются и немедленно закрываются; их присутствие в списке имён файлов заметно только тогда, когда последний открытый файл пуст.
Строки возвращаются с любыми символами новой строки, что означает, что последняя строка в файле может быть без них.
Вы можете управлять способом открытия файлов, предоставив функцию обработки открытия через параметр openhook в fileinput.input() или FileInput(). Функция должна принимать два аргумента, filename и mode, и возвращать соответствующий открытый файлоподобный объект. Если указаны encoding и/или errors, они будут переданы функции обработки как дополнительные ключевые аргументы. Этот модуль предоставляет функцию hook_compressed() для поддержки сжатых файлов.
Следующая функция является основным интерфейсом этого модуля:
-
fileinput.input(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None) -
Создает экземпляр класса
FileInput. Экземпляр будет использоваться в качестве глобального состояния для функций этого модуля, а также возвращается для использования во время итерации. Параметры этой функции будут переданы конструктору классаFileInput.Экземпляр
FileInputможет использоваться как менеджер контекста в инструкцииwith. В этом примере input будет закрыт после выхода из инструкцииwith, даже если произошла ошибка:with fileinput.input(files=('spam.txt', 'eggs.txt'), encoding="utf-8") as f: for line in f: process(line)Изменено в версии 3.2: Может использоваться как менеджер контекста.
Изменено в версии 3.8: Ключевые параметры mode и openhook теперь являются только ключевыми.
Изменено в версии 3.10: Добавлены ключевые параметры encoding и errors.
Следующие функции используют глобальное состояние, созданное функцией 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, encoding=None, errors=None) -
Класс
FileInputявляется реализацией; его методыfilename(),fileno(),lineno(),filelineno(),isfirstline(),isstdin(),nextfile()иclose()соответствуют функциям с таким же именем в модуле. Кроме того, он является итерируемым и имеет методreadline(), который возвращает следующую строку ввода. К последовательности необходимо обращаться в строго последовательном порядке; произвольный доступ иreadline()не могут смешиваться.С помощью mode вы можете указать режим файла, который будет передан в
open(). Он должен быть одним из'r'и'rb'.openhook, если задан, должен быть функцией, которая принимает два аргумента, filename и mode, и возвращает соответствующий открытый файлоподобный объект. Вы не можете использовать inplace и openhook вместе.
Вы можете указать encoding и errors, которые передаются в
open()или openhook.Экземпляр
FileInputможет использоваться как менеджер контекста в инструкцииwith. В этом примере input будет закрыт после выхода из инструкцииwith, даже если произошла ошибка:with FileInput(files=('spam.txt', 'eggs.txt')) as input: process(input)Изменено в версии 3.2: Может использоваться как менеджер контекста.
Изменено в версии 3.8: Ключевой параметр mode и openhook теперь являются только ключевыми.
Изменено в версии 3.10: Добавлены ключевые параметры encoding и errors.
Изменено в версии 3.11: Режимы
'rU'и'U'и метод__getitem__()были удалены.
Дополнительная фильтрация на месте: если аргумент ключевого слова inplace=True передается в fileinput.input() или в конструктор FileInput, файл перемещается во временный файл, а стандартный вывод направляется в входной файл (если файл с таким же именем, как временный, уже существует, он будет перезаписан без предупреждения). Это позволяет создать фильтр, который перезаписывает входной файл на месте. Если параметр backup задан (обычно как backup='.<some extension>'), он указывает расширение для временного файла, и временный файл сохраняется; по умолчанию расширение равно '.bak', и оно удаляется при закрытии выходного файла. Фильтрация на месте отключена при чтении со стандартного ввода.
Этот модуль предоставляет две следующие открывающие функции:
-
fileinput.hook_compressed(filename, mode, *, encoding=None, errors=None) -
Прозрачно открывает файлы, сжатые gzip и bzip2 (опознаваемые по расширениям
'.gz'и'.bz2'), используя модулиgzipиbz2. Если расширение файла не'.gz'или'.bz2', файл открывается обычным образом (т.е., с помощьюopen()без разархивирования).Значения encoding и errors передаются в
io.TextIOWrapperдля сжатых файлов и открыты для обычных файлов.Пример использования:
fi = fileinput.FileInput(openhook=fileinput.hook_compressed, encoding="utf-8")Изменено в версии 3.10: Добавлены только ключевые параметры encoding и errors.
-
fileinput.hook_encoded(encoding, errors=None) -
Возвращает функцию, которая открывает каждый файл с помощью
open(), используя заданные encoding и errors для чтения файла.Пример использования:
fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8", "surrogateescape"))Изменено в версии 3.6: Добавлен необязательный параметр errors.
Устарело начиная с версии 3.10: Эта функция устарела, так как у
fileinput.input()иFileInputтеперь есть параметры encoding и errors.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/fileinput.html