我写了很多小脚本,逐行处理文件。在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习语?
答案 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非常整洁。