Python эквивалент Perl в то время как (<>) {...}? - PullRequest
21 голосов
/ 30 апреля 2009

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

while (<>) {
    do stuff;
}

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

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

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

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

Ответы [ 3 ]

49 голосов
/ 30 апреля 2009

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

import fileinput

for line in fileinput.input(): ...
15 голосов
/ 30 апреля 2009
import fileinput
for line in fileinput.input():
    process(line)

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

7 голосов
/ 30 апреля 2009

fileinput по умолчанию - стандартный ввод, поэтому он будет немного более кратким.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...