代码之家  ›  专栏  ›  技术社区  ›  Gerd

我可以在python3中使用类似perl中的-n管道选项吗?

  •  2
  • Gerd  · 技术社区  · 7 年前

    如果我在perl中查找文件名模式,可以执行以下简单操作:

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

    -n
    使Perl在程序周围假设以下循环,这使其在文件名参数上进行迭代 sed -n awk :

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

    如何在python3中编写此代码?(python3—帮助中不显示此选项)

    1 回复  |  直到 7 年前
        1
  •  3
  •   amon    7 年前

    Python Oneliner与 python -c '...' 非常有限,因为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="")