我可以理解以下sed正则表达式。
sed 's/.*\(SNAP=[^|]*\) |.*/\1/' | sort | uniq -c > $log.snaps
我的任务是将此bash行转换为Python代码。什么是最好的方法呢?
只需使用上面的 cmd 调用os.system(cmd)
?
或者使用Python re
模块?
任何伪代码都是最受欢迎的。 :)
答案 0 :(得分:2)
你问了最好的方法,我只是给你一个简单的方法。你当然可以优化它。
但是,仍然需要使用约束进行测试,因为调用shell需要一些时间
值得注意的是,shell中的管道可能是获得更快代码的好方法,因为sed
可以在等待cat
完成时开始工作。 sort
也可以开始工作,但显然只有在sed工作完成后才会输出。因此,这是在您的IO期间使用CPU
的好方法,应被视为低成本/良好性能解决方案。
我试过一个简单的例子,但你会明白这个想法:
在test
:
love
lol
loki
loki
ki
loutre
poutre
简单的bash命令,看起来像你的:
cat test | sed 's/lo\(.*\)$/\1/' | sort | uniq
输出:
ki
l
poutre
utre
ve
现在让我们尝试在python中执行相同的操作:
#!/usr/bin/python
import re
s = """love
lol
loki
loki
ki
loutre
poutre"""
arr = s.split('\n') # sed iterates on each line
arr = map((lambda line: re.sub(r'lo(.*)$', r'\1', line)), arr) # sed
arr = set(arr) # uniq
arr = sorted(list(arr)) # sort
print '\n'.join(arr) # output it
这也可以用丑陋的代码编写:
print '\n'.join(sorted(list(set(map((lambda line: re.sub(r'lo(.*)$', r'\1', line)), s.split('\n'))))))