我有兴趣使用Python作为流编辑器,类似于perl可以使用-ne标志,或者Sed和Awk可以做到的方式。我尝试了一些模块用于做一个Python内衬,例如:
Oneliner:https://github.com/gvalkov/python-oneliner
pyp:https://code.google.com/p/pyp/
pyle:https://pypi.python.org/pypi/pyle/0.1
我还从这里修改了这个小模块(我将其命名为ne.py):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])'
相当于
cat input_file.txt|perl -ne 'chomp $_; @a=split /\t/, $_;print "$a[1]\n"'
并且两者都将成功打印每个制表符分隔行的第二个元素。
但是,似乎这些模块中没有一个允许任何控制语句(如果,虽然,对于函数)。
例如,我修改了以前的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
但是我还没有看到有关模块的讨论来处理这个问题。
模块ne.py是:
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')
答案 0 :(得分:0)
我想我想通了,你需要在命令之前添加$:
cat input_file.txt|python -mne $'line=line.rstrip();values = line.split("\t");\nif (values[1]>1): print (values[1])'