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

24 投票
3 回答
5389 浏览
提问于 2025-04-15 11:20

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

7

fileinput 默认使用标准输入(stdin),所以这样写会稍微简洁一些。

不过,如果你经常在命令行上操作,这个 管道技巧 非常不错。

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

这段代码会遍历所有在 sys.argv[1:] 中列出的文件的每一行。如果这个列表是空的,它会默认使用 sys.stdin,也就是标准输入。

52

标准库中的fileinput模块正是你需要的东西:

import fileinput

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

撰写回答