【发布时间】:2009-12-07 22:03:01
【问题描述】:
我想在 python 函数中实现 unix 命令“grep -r”。我知道commands.getstatusoutput(),但现在我不想使用它。我想出了这个:
def grep_r (str, dir):
files = [ o[0]+"/"+f for o in os.walk(dir) for f in o[2] if os.path.isfile(o[0]+"/"+f) ]
return [ l for f in files for l in open(f) if str in l ]
但这当然不使用正则表达式,它只是检查'str'是否是'l'的子字符串。所以我尝试了以下方法:
def grep_r (pattern, dir):
r = re.compile(pattern)
files = [ o[0]+"/"+f for o in os.walk(dir) for f in o[2] if os.path.isfile(o[0]+"/"+f) ]
return [ l for f in files for l in open(f) if r.match(l) ]
但这不起作用,即使在前一个函数有的地方,它也没有给我任何匹配。发生了什么变化?我可以把它分成一堆嵌套循环,但我更感兴趣的是简洁而不是可读。
【问题讨论】: