Spec-Zone.ru › Python 3.7

fileinput — Итерирование по строкам из нескольких потоков ввода

Исходный код: Lib/fileinput.py

Этот модуль реализует вспомогательный класс и функции для быстрого цикла по стандартному вводу или списку файлов. Если вам нужно просто прочитать или записать один файл, см. open().

Типичное использование:

import fileinput
for line in fileinput.input():
    process(line)

Это итерируется по строкам всех файлов, перечисленных в sys.argv[1:], по умолчанию используя sys.stdin, если список пуст. Если имя файла '-', оно также заменяется на sys.stdin, и необязательные аргументы mode и openhook игнорируются. Для указания альтернативного списка имён файлов, передайте его в качестве первого аргумента в input(). Также разрешено одно имя файла.

Все файлы по умолчанию открываются в текстовом режиме, но вы можете переопределить это, указав параметр mode в вызове input() или FileInput. Если при открытии или чтении файла возникает ошибка ввода-вывода, генерируется исключение OSError.

Изменено в версии 3.3: IOError раньше использовалось; теперь это псевдоним 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()

Возвращает 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.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(), используя заданное кодирование и режим обработки ошибок для чтения файла.

Пример использования: 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.7/library/fileinput.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API