Python流编辑模块

时间:2015-07-07 17:03:08

标签: python perl module

我有兴趣使用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/3923510https://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') 

1 个答案:

答案 0 :(得分:0)

我想我想通了,你需要在命令之前添加$:

cat input_file.txt|python -mne $'line=line.rstrip();values = line.split("\t");\nif (values[1]>1): print (values[1])' 

帽子提示https://stackoverflow.com/a/23301247/3923510