Python相当于Perl的while(<>){...}?

时间:2009-04-30 14:23:46

标签: python stdin

我写了很多小脚本,逐行处理文件。在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 个答案:

答案 0 :(得分:49)

标准库中的fileinput模块正是您想要的:

import fileinput

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

答案 1 :(得分:15)

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

这将遍历sys.argv [1:]中列出的所有文件的行,如果列表为空,则默认为sys.stdin。

答案 2 :(得分:7)

fileinput默认为stdin,因此会使其更简洁。

如果你做了很多命令行工作,那么这个piping hack非常整洁。