我可以在python3中使用perl中的-n pipe-option吗?

时间:2018-02-09 14:26:52

标签: python python-3.x perl

如果我在perl中查找文件名模式,您可以这么做:

ls -l | perl -n -e'if(/.*180205.*/){ print "$_\n"; }'
  

-n
  导致Perl在程序周围采用以下循环,这使得迭代文件名参数有点像sed -nawk

LINE:
  while (<>) {
      ...             # your program goes here
  }

我如何在python3中编码? (python3 --help显示不是这样的选项)

1 个答案:

答案 0 :(得分:3)

带有python -c '...'的Python oneliner受到极大限制,因为Python语法假定每个语句都位于自己的行上。您可以将一些语句与分号“;”组合在一起,但是某些语句需要有自己的行,特别是像循环这样的复合语句。如果你想在命令行上写这个,我们必须将所有行的循环表达为列表理解:

python3 -c 'import re, fileinput; [print(line, end="") for line in fileinput.input() if re.search("180205", line)]'

这当然是不可读的,因为Python不适合单行。循环fileinput.input()类似于Perl的-n选项。

如果您想使用Python,请考虑编写脚本。这更具可读性:

import re, fileinput
for line in fileinput.input():
    if re.search("180205", line):
        print(line, end="")