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

我可以在python3中使用类似perl中的-n管道选项吗?,python,python-3.x,perl,Python,Python 3.x,Perl,如果我在perl中查找文件名模式,您可以执行以下简单操作: ls -l | perl -n -e'if(/.*180205.*/){ print "$_\n"; }' -n 使Perl在程序中执行以下循环,这使它在文件名参数上进行迭代,有点像sed-n或awk: LINE: while (<>) { ... # your program goes here } 行: 而(){ …#您的程序在这里运行 } 如何在python3中编写此代

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

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

使Perl在程序中执行以下循环,这使它在文件名参数上进行迭代,有点像
sed-n
awk

LINE:
  while (<>) {
      ...             # your program goes here
  }
行:
而(){
…#您的程序在这里运行
}

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

带有
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="")

您是在命令行上设置的还是python代码就可以了?您可以通过执行
Perl-n-E'来大大缩短Perl程序,比如说如果/180205/
,对于任何熟悉python但不熟悉Perl的人,您可能想描述
-n
的确切功能。实际上,
Perl--help
-n
意味着“假设”而(){…}“循环编程当您可以执行
ls-l*180205*
时,为什么需要perl或python?