Подтвердить что ты не робот

Python эквивалент Perl while (<>) {...}?

Я пишу много маленьких скриптов, которые обрабатывают файлы по очереди. В Perl я использую

while (<>) {
    do stuff;
}

Это удобно, потому что ему не важно, откуда приходит вход (файл или stdin).

В Python я использую этот

if len(sys.argv) == 2: # there a command line argument
    sys.stdin = file(sys.argv[1])
for line in sys.stdin.readlines():
    do stuff

который не кажется очень элегантным. Есть ли идиома Python, которая легко обрабатывает входной файл/stdin?

4b9b3361

Ответ 1

Модуль fileinput в стандартной библиотеке - это то, что вы хотите:

import fileinput

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

Ответ 2

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

Это итерация по строкам всех файлов, перечисленных в sys.argv [1:], по умолчанию для sys.stdin, если список пуст.

Ответ 3

fileinput по умолчанию используется stdin, поэтому он будет немного более кратким.

Если вы много работаете с командной строкой, этот прокладку труб очень опрятен.