Ответ 1
Модуль fileinput в стандартной библиотеке - это то, что вы хотите:
import fileinput
for line in fileinput.input(): ...
Я пишу много маленьких скриптов, которые обрабатывают файлы по очереди. В 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?
Модуль fileinput в стандартной библиотеке - это то, что вы хотите:
import fileinput
for line in fileinput.input(): ...
import fileinput
for line in fileinput.input():
process(line)
Это итерация по строкам всех файлов, перечисленных в sys.argv [1:], по умолчанию для sys.stdin, если список пуст.
fileinput по умолчанию используется stdin, поэтому он будет немного более кратким.
Если вы много работаете с командной строкой, этот прокладку труб очень опрятен.