Python流编辑模块

2024-04-25 09:57:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我感兴趣的是使用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') 

Tags: 模块httpsimporttxtcominputsysline