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.6, будет удалено в версии 3.8: Параметр bufsize.
Следующие функции используют глобальное состояние, созданное функцией fileinput.input(); если активного состояния нет, генерируется исключение RuntimeError.
-
fileinput.filename() -
Возвращает имя файла, который в данный момент читается. Перед чтением первой строки возвращает
None.
-
fileinput.fileno() -
Возвращает целое число «дескриптор файла» для текущего файла. Когда файл не открыт (перед первой строкой и между файлами), возвращает
-1.
-
fileinput.lineno() -
Возвращает кумулятивное номер строки прочитанной строки. Перед чтением первой строки возвращает
0. После чтения последней строки последнего файла возвращает номер строки этой строки.
-
fileinput.filelineno() -
Возвращает номер строки в текущем файле. Перед чтением первой строки возвращает
0. После чтения последней строки последнего файла возвращает номер строки этой строки в файле.
-
fileinput.isfirstline() -
Возвращает истину, если прочитанная строка является первой строкой своего файла, иначе возвращает ложь.
-
fileinput.isstdin() -
Возвращает истину, если последняя строка была прочитана из
sys.stdin, иначе возвращает ложь.
-
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.6, будет удалено в версии 3.8: Параметр 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, errors=None) -
Возвращает хук, который открывает каждый файл с помощью
open(), используя заданное кодирование и errors для чтения файла.Пример использования:
fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8", "surrogateescape"))Изменено в версии 3.6: Добавлен необязательный параметр errors.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/fileinput.html