我感兴趣的是使用Python作为流编辑器,类似于perl使用-ne标志或Sed和Awk的方式。我尝试了许多用于编写Python单行程序的模块,例如:
单行线:https://github.com/gvalkov/python-oneliner
pyp:https://code.google.com/p/pyp/
派尔:https://pypi.python.org/pypi/pyle/0.1
我还修改了这个小模块(我命名它东北太平洋)从这里:https://stackoverflow.com/a/17197610/3923510,由https://stackoverflow.com/users/168740/matt-mcclure来模拟perl-ne。在
例如:
cat input_file.txt|python -mne 'line=line.rstrip();values = line.split("\t");print (values[1])'
相当于
^{pr2}$并且两者都将成功打印每个制表符分隔行的第二个元素。在
然而,这些模块中似乎没有一个允许任何控制语句(if,while,for functions)。在
例如,我修改了前面的Python代码,只在第二个元素大于1时打印它。在
cat input_file.txt|python -mne 'line=line.rstrip();values = line.split("\t");if (values[1]>1): print (values[1])'
这产生了一个语法错误,而perl版本
cat input_file.txt|perl -ne 'chomp $_; @a=split /\t/, $_;print "$a[1]\n" if ($a[1]>1)'
干得不错。Oneliner、pyp和pyle都有这个问题。我认为发生Python错误是因为Python有大量空白,而perl没有。在
有没有更好的模块可以在终端上使用Python,或者我可以轻松地修复我正在使用的模块吗?如果不是,那么在这方面Python是否可能没有perl/Sed/Awk那么强大?在
人们已经在这里讨论过这个问题:
Python equivalent to perl -pe?
我又问了一个重复的问题:
Python equivalent to perl -ne switch
但是我还没有看到任何关于处理这个问题的模块的讨论。在
模块东北太平洋是:
from __future__ import print_function
import re
import sys
import math
for line in sys.stdin:
exec(sys.argv[1], globals(), locals())
try:
line,
except:
sys.exit('-p destination: $!\n')
我想我明白了,你需要在命令前加一个$:
帽子提示到https://stackoverflow.com/a/23301247/3923510
相关问题 更多 >
编程相关推荐