我可以在python3中使用类似perl中的-n管道选项吗?
如果我在perl中查找文件名模式,您可以执行以下简单操作:我可以在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中编写此代
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?