Модуль fileinput
реализует вспомогательный класс и функции для быстрого написания цикла поверх стандартного ввода или списка файлов. Если вы просто хотите прочитать или записать один файл, смотрите функцию open()
.
Типичное использование модуля fileinput
:
import fileinput for line in fileinput.input(): process(line)
Этот код перебирает строки всех файлов, по перечисленных в sys.argv[1:]
, если список пуст, то по умолчанию читает sys.stdin
. Если имя файла равно '-'
, то оно также заменяется на sys.stdin
, а необязательные аргументы mode
и openhook
игнорируются. Также допускается одно имя файла.
Для указания альтернативный списка имен файлов, его необходимо передать в качестве первого аргумента для функции модуля fileinput.input()
Смотрите очень востребованный пример "Объединения нескольких файлов в один".
Все файлы открываются в текстовом режиме по умолчанию, но это поведение можно переопределить в аргументе mode
в функции fileinput.input()
или классе fileinput.FileInput()
. Если во время открытия или чтения файла возникает ошибка ввода-вывода, то поднимается исключение OSError
.
Если sys.stdin
используется более одного раза, второе и последующее использование не вернет никаких строк, за исключением интерактивного использования, если оно было явно сброшено. Например, с использованием sys.stdin.seek(0)
.
Пустые файлы открываются и сразу закрываются; Единственный раз, когда их присутствие в списке имен файлов вообще заметно, это когда последний открытый файл пуст.
Строки из файлов возвращаются с символами новой строки newlines
, это означает, что последняя строка в файле может быть пустой.
Можно управлять тем, как файлы открываются, предоставляя хук открытия через аргумент openhook
для функции fileinput.input()
или класса fileinput.FileInput()
. Хук должен быть функцией, которая принимает два аргумента, имя файла filename
и режим mode
, и возвращает соответственно открытый файловый объект. Модуль fileinput
предусматривает два полезных хука.
Необязательная фильтрация на месте: если ключевой аргумент inplace=True
передается в fileinput.input()
или в конструктор fileinput.FileInput()
, то файл перемещается в файл резервной копии, а стандартный вывод направляется во входной файл. Если файла резервной копии с таким же именем существует, то он будет заменен без уведомления. Это поведение позволяет написать фильтр, который перезаписывает свой входной файл на месте. Аргумент backup
указывает расширение для файла резервной копии, по умолчанию расширение backup='.bak'
. Файл резервной копии удаляется при закрытии выходного файла. Фильтрация на месте отключается при считывании стандартного ввода.
Функция input() модуля fileinput создает экземпляр класса fileinput.FileInput() и возвращает глобальное состояние чтения потока.
Представленные в этом разделе функции используют глобальное состояние чтения потока из списка файлов, созданное функцией fileinput.input(). Если нет активного состояния, вызывается исключение RuntimeError.
Класс FileInput() модуля fileinput возвращает объект FileInput и является реализацией состояния потока строк из последовательности файлов.
При чтении потока из списка файлов можно управлять тем, как файлы открываются, предоставляя хук открытия через аргумент openhook. Модуль fileinput предусматривает два полезных хука.
В примере будем искать все файлы, расположенные в директории path, совпадающие с паттерном pattern и записывать данные из всех найденных файлов в новый общий файл new_file.all.