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

Eis*_*sen 22 python stdin

我写了很多小脚本,逐行处理文件.在Perl中,我使用

while (<>) {
    do stuff;
}
Run Code Online (Sandbox Code Playgroud)

这很方便,因为它不关心输入来自何处(文件或标准输入).

在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
Run Code Online (Sandbox Code Playgroud)

这似乎不是很优雅.是否有一个容易处理文件/标准输入的Python习语?

Ale*_*lli 50

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

import fileinput

for line in fileinput.input(): ...
Run Code Online (Sandbox Code Playgroud)


Ric*_*dle 15

import fileinput
for line in fileinput.input():
    process(line)
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*ark 7

fileinput默认为stdin,因此会使它更简洁.

但是,如果你做了很多命令行的事情,这个管道黑客非常整洁.