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(). Если при открытии или чтении файла произойдёт ошибка ввода-вывода, генерируется исключение IOError.
Если sys.stdin используется более одного раза, то повторные вызовы будут возвращать пустые строки, за исключением, возможно, интерактивного использования или явного сброса (например, используя sys.stdin.seek(0)).
Пустые файлы открываются и немедленно закрываются; их наличие в списке имён файлов заметно только тогда, когда последний открытый файл пуст.
Строки возвращаются с сохранёнными символами новой строки, что означает, что последняя строка в файле может их не содержать.
Вы можете контролировать способ открытия файлов, предоставив обработчик открытия через параметр openhook функции fileinput.input() или FileInput(). Обработчик должен быть функцией, принимающей два аргумента, filename и mode, и возвращающей соответствующий открытый файл-подобный объект. В этом модуле уже реализованы две полезные функции-обработчики.
Следующая функция является основным интерфейсом этого модуля:
-
fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]]) -
Создаёт экземпляр класса
FileInput. Экземпляр будет использоваться как глобальное состояние для функций этого модуля и также возвращается для использования во время итерации. Параметры этой функции будут переданы конструктору классаFileInput.Изменено в версии 2.5: Добавлены параметры mode и openhook.
Изменено в версии 2.7.12: Параметр bufsize больше не используется.
Следующие функции используют глобальное состояние, созданное функцией fileinput.input(); если активного состояния нет, генерируется исключение RuntimeError.
-
fileinput.filename() -
Возвращает имя файла, который в настоящее время читается. Перед чтением первой строки возвращает
None.
-
fileinput.fileno() -
Возвращает целое число «дескриптор файла» для текущего файла. Когда файл не открыт (перед первой строкой и между файлами), возвращает
-1.Добавлена в версии 2.5.
-
fileinput.lineno() -
Возвращает кумулятивное номер строки для только что прочитанной строки. Перед чтением первой строки возвращает
0. После чтения последней строки последнего файла возвращает номер строки этой строки.
-
fileinput.filelineno() -
Возвращает номер строки в текущем файле. Перед чтением первой строки возвращает
0. После чтения последней строки последнего файла возвращает номер этой строки в файле.
-
fileinput.isfirstline() -
Возвращает True, если только что прочитанная строка — первая строка своего файла, иначе возвращает False.
-
fileinput.isstdin() -
Возвращает True, если последняя строка была прочитана из
sys.stdin, иначе возвращает False.
-
fileinput.nextfile() -
Закрывает текущий файл, чтобы следующая итерация прочла первую строку из следующего файла (если таковой имеется); не прочитанные строки из файла не учитываются в кумулятивном подсчёте строк. Имя файла не меняется до тех пор, пока не будет прочитана первая строка следующего файла. До чтения первой строки эта функция не имеет эффекта; её нельзя использовать для пропуска первого файла. После чтения последней строки последнего файла эта функция не имеет эффекта.
-
fileinput.close() -
Закрывает последовательность.
Класс, реализующий поведение последовательности, предоставляемое модулем, также доступен для наследования:
-
class fileinput.FileInput([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]]) -
Класс
FileInputявляется реализацией; его методыfilename(),fileno(),lineno(),filelineno(),isfirstline(),isstdin(),nextfile()иclose()соответствуют функциям с такими же именами в модуле. Кроме того, у него есть методreadline(), который возвращает следующую строку ввода, и метод__getitem__(), который реализует поведение последовательности. Доступ к последовательности должен осуществляться в строго последовательном порядке; произвольный доступ иreadline()не могут быть смешаны.С помощью mode вы можете указать режим файла, который будет передан функции
open(). Он должен быть одним из'r','rU','U'и'rb'.Параметр openhook, если задан, должен быть функцией, принимающей два аргумента, filename и mode, и возвращающей соответствующий открытый файл-подобный объект. Вы не можете использовать inplace и openhook вместе.
Изменено в версии 2.5: Добавлены параметры mode и openhook.
Изменено в версии 2.7.12: Параметр bufsize больше не используется.
Дополнительная фильтрация на месте: если ключевой аргумент inplace=1 передан функции fileinput.input() или конструктору FileInput, файл перемещается в резервную копию, а стандартный вывод направляется в входной файл (если файл с таким же именем, как резервная копия, уже существует, он будет заменён без предупреждения). Это позволяет создавать фильтры, которые переписывают свой входной файл на месте. Если параметр backup задан (обычно как backup='.<some extension>'), он указывает расширение для резервной копии, и резервная копия остаётся; по умолчанию расширение — '.bak', и оно удаляется при закрытии выходного файла. Фильтрация на месте отключена при чтении со стандартного ввода.
Примечание
Текущая реализация не работает для файловых систем MS-DOS 8+3.
Два следующих обработчика открытия предоставляются этим модулем:
-
fileinput.hook_compressed(filename, mode) -
Прозрачно открывает файлы, сжатые gzip и bzip2 (опознаваемые по расширениям
'.gz'и'.bz2'), используя модулиgzipиbz2. Если расширение имени файла не'.gz'или'.bz2', файл открывается обычным способом (т.е., с использованиемopen()без распаковки).Пример использования:
fi = fileinput.FileInput(openhook=fileinput.hook_compressed)Добавлена в версии 2.5.
-
fileinput.hook_encoded(encoding) -
Возвращает обработчик, который открывает каждый файл с помощью
io.open(), используя заданное кодирование для чтения файла.Пример использования:
fi = fileinput.FileInput(openhook=fileinput.hook_encoded("iso-8859-1"))Примечание
С этим обработчиком,
FileInputможет возвращать строки Unicode в зависимости от указанного кодирования.Введено в версии 2.5.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/fileinput.html