Документация Python неофициальный перевод

fileinput.md

122 строк · 13.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/library/fileinput.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 10.2. [`fileinput`](https://python-all.ru/2.7/library/fileinput.html#module-fileinput) – Итерация по строкам из нескольких входных потоков89**Исходный код:** [Lib/fileinput.py](https://python-all.ru/src/2.7/Lib/fileinput.py)1011---1213Этот модуль реализует вспомогательный класс и функции для быстрого создания цикла по стандартному вводу или списку файлов. Если нужно только прочитать или записать один файл, см. [`open()`](https://python-all.ru/2.7/library/functions.html#open).1415Типичное использование:1617```python18import fileinput19for line in fileinput.input():20    process(line)21```2223Эта функция итерируется по строкам всех файлов, перечисленных в `sys.argv[1:]`, по умолчанию используется `sys.stdin`, если список пуст. Если имя файла равно `'-'`, оно также заменяется на `sys.stdin`. Чтобы указать альтернативный список имён файлов, передайте его первым аргументом в [`input()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.input). Допускается также одно имя файла.2425Все файлы по умолчанию открываются в текстовом режиме, но это можно изменить, указав параметр *mode* в вызове [`input()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.input) или [`FileInput()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.FileInput). Если при открытии или чтении файла происходит ошибка ввода-вывода, возбуждается [`IOError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.IOError).2627Если `sys.stdin` используется более одного раза, второй и последующие вызовы не вернут ни одной строки, за исключением, возможно, интерактивного использования или если он был явно сброшен (например, с помощью `sys.stdin.seek(0)`).2829Пустые файлы открываются и сразу закрываются; их присутствие в списке имён файлов становится заметным, только когда последний открытый файл пуст.3031Строки возвращаются с сохранением всех символов новой строки; это означает, что последняя строка в файле может не иметь такого символа.3233Вы можете управлять тем, как открываются файлы, передав хук открытия через параметр *openhook* в [`fileinput.input()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.input) или [`FileInput()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.FileInput). Хук должен быть функцией, принимающей два аргумента: *filename* и *mode*, и возвращающей подходящий открытый файлоподобный объект. Этот модуль уже предоставляет два полезных хука.3435Следующая функция является основным интерфейсом этого модуля:3637#### `fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])`3839Создаёт экземпляр класса [`FileInput`](https://python-all.ru/2.7/library/fileinput.html#fileinput.FileInput). Этот экземпляр будет использоваться как глобальное состояние для функций этого модуля, а также возвращается для использования во время итерации. Параметры этой функции будут переданы конструктору класса [`FileInput`](https://python-all.ru/2.7/library/fileinput.html#fileinput.FileInput).4041Изменено в версии 2.5: Добавлены параметры *mode* и *openhook*.4243Изменено в версии 2.7.12: Параметр *bufsize* больше не используется.4445Следующие функции используют глобальное состояние, созданное [`fileinput.input()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.input); если активное состояние отсутствует, возбуждается [`RuntimeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.RuntimeError).4647#### `fileinput.filename()`4849Возвращает имя файла, который в данный момент читается. До чтения первой строки возвращает `None`.5051#### `fileinput.fileno()`5253Возвращает целочисленный «файловый дескриптор» текущего файла. Когда файл не открыт (до первой строки и между файлами), возвращает `-1`.5455Новое в версии 2.5.5657#### `fileinput.lineno()`5859Возвращает накопленный номер строки для только что прочитанной строки. До чтения первой строки возвращает `0`. После чтения последней строки последнего файла возвращает номер этой строки.6061#### `fileinput.filelineno()`6263Возвращает номер строки в текущем файле. До чтения первой строки возвращает `0`. После чтения последней строки последнего файла возвращает номер этой строки внутри файла.6465#### `fileinput.isfirstline()`6667Возвращает true, если только что прочитанная строка является первой строкой своего файла, в противном случае возвращает false.6869#### `fileinput.isstdin()`7071Возвращает true, если последняя строка была прочитана из `sys.stdin`, в противном случае возвращает false.7273#### `fileinput.nextfile()`7475Закрывает текущий файл, чтобы следующая итерация начала чтение с первой строки следующего файла (если такой есть); строки, не прочитанные из файла, не учитываются в общем количестве строк. Имя файла не изменяется до тех пор, пока не будет прочитана первая строка следующего файла. До чтения первой строки эта функция не действует; её нельзя использовать для пропуска первого файла. После чтения последней строки последнего файла эта функция также не действует.7677#### `fileinput.close()`7879Закрывает последовательность.8081Класс, реализующий поведение последовательности, предоставляемое модулем, также доступен для создания подклассов:8283#### `class fileinput.FileInput([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])`8485Класс [`FileInput`](https://python-all.ru/2.7/library/fileinput.html#fileinput.FileInput) – это реализация; его методы [`filename()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.filename), [`fileno()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.fileno), [`lineno()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.lineno), [`filelineno()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.filelineno), [`isfirstline()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.isfirstline), [`isstdin()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.isstdin), [`nextfile()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.nextfile) и [`close()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.close) соответствуют функциям с теми же именами в модуле. Кроме того, он имеет метод [`readline()`](https://python-all.ru/2.7/library/stdtypes.html#file.readline), который возвращает следующую входную строку, и метод [`__getitem__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getitem__), реализующий поведение последовательности. Последовательность должна обрабатываться строго последовательно; произвольный доступ и [`readline()`](https://python-all.ru/2.7/library/stdtypes.html#file.readline) не могут смешиваться.8687С помощью *mode* можно указать, какой режим файла будет передан в [`open()`](https://python-all.ru/2.7/library/functions.html#open). Это должен быть один из `'r'`, `'rU'`, `'U'` и `'rb'`.8889Параметр *openhook*, если задан, должен быть функцией, принимающей два аргумента: *filename* и *mode*, и возвращающей соответствующим образом открытый файлоподобный объект. *inplace* и *openhook* нельзя использовать вместе.9091Изменено в версии 2.5: Добавлены параметры *mode* и *openhook*.9293Изменено в версии 2.7.12: Параметр *bufsize* больше не используется.9495**Опциональная фильтрация на месте:** если именованный аргумент `inplace=1` передан в [`fileinput.input()`](https://python-all.ru/2.7/library/fileinput.html#fileinput.input) или в конструктор [`FileInput`](https://python-all.ru/2.7/library/fileinput.html#fileinput.FileInput), файл перемещается в резервную копию, а стандартный вывод направляется во входной файл (если файл с тем же именем, что и резервная копия, уже существует, он будет заменён бесшумно). Это позволяет написать фильтр, который перезаписывает свой входной файл на месте. Если параметр *backup* задан (обычно как `backup='.<some extension>'`), он указывает расширение для файла резервной копии, и файл резервной копии остаётся; по умолчанию расширение равно `'.bak'` и он удаляется при закрытии выходного файла. Фильтрация на месте отключается при чтении стандартного ввода.9697> **Примечание**98>99> Текущая реализация не работает для файловых систем MS-DOS 8+3.100101Следующие два хука открытия предоставляются этим модулем:102103#### `fileinput.hook_compressed(filename, mode)`104105Прозрачно открывает файлы, сжатые gzip и bzip2 (распознаваемые по расширениям `'.gz'` и `'.bz2'`), с использованием модулей [`gzip`](https://python-all.ru/2.7/library/gzip.html#module-gzip) и [`bz2`](https://python-all.ru/2.7/library/bz2.html#module-bz2). Если расширение имени файла не `'.gz'` и не `'.bz2'`, файл открывается обычным образом (то есть с помощью [`open()`](https://python-all.ru/2.7/library/functions.html#open) без какого-либо распаковывания).106107Пример использования: `fi = fileinput.FileInput(openhook=fileinput.hook_compressed)`108109Новое в версии 2.5.110111#### `fileinput.hook_encoded(encoding)`112113Возвращает хук, который открывает каждый файл с помощью [`io.open()`](https://python-all.ru/2.7/library/io.html#io.open), используя заданную *encoding* для чтения файла.114115Пример использования: `fi = fileinput.FileInput(openhook=fileinput.hook_encoded("iso-8859-1"))`116117> **Примечание**118>119> С помощью этого хука [`FileInput`](https://python-all.ru/2.7/library/fileinput.html#fileinput.FileInput) может возвращать строки Unicode в зависимости от указанной *кодировки*.120121Новое в версии 2.5.122