Я бы хотел реализовать команду unix 'grep -r' в функции python. я знаю о command.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) ]
но это не работает, это не дает мне совпадений даже там, где работала предыдущая функция. что изменилось? я мог бы просто разбить его на несколько вложенных циклов, но меня больше интересует краткость, чем читаемость.