23

我编写了许多逐行处理文件的小脚本。在 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 习语?

4

3 回答 3

51

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

import fileinput

for line in fileinput.input(): ...
于 2009-04-30T14:26:51.863 回答
15
import fileinput
for line in fileinput.input():
    process(line)

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

于 2009-04-30T14:27:48.880 回答
7

fileinput默认为标准输入,因此会稍微简洁一些。

但是,如果您执行大量命令行操作,则此管道技巧非常简洁。

于 2009-04-30T14:31:06.173 回答