2010-05-26 7 views
0

grep의 역순으로 수행하는 작은 파이썬 스크립트를 만들고 싶습니다. "searched_string"이없는 디렉토리/하위 디렉토리의 파일과 일치 시키려합니다.python grep reverse matching

지금까지 내가 그런 짓을했는지 :이 작은 스크립트는 "자바"또는 각 하위 디렉토리 안에 "JSP"확장 및 출력됩니다 그들에게 전체 경로로 everyfiles를 나열됩니다

import os 

filefilter = ['java','.jsp'] 
path= "/home/patate/code/project" 
for path, subdirs, files in os.walk(path): 
    for name in files: 
     if name[-4:] in filefilter : 
     print os.path.join(path, name) 

.

이제 나머지를 수행하는 방법을 궁금해합니다. 예를 들어 하나의 파일에서 세션 관리 항목을 잊어 버린 경우 (직접 파일 액세스를 허용하는 경우) "if 변수 f에 바인딩 경로와 파일이 포함되어있는 경우! user.hasPermission "이 문자열을 포함하지 않는 파일을 나열합니다.

어떤 도움을 크게 감상 할 수

!

감사

+4

grep의 -l, -L 및 -v 옵션을 볼 수 있습니다. -v 일치를 반전합니다 (즉, 패턴과 일치하지 않는 행을 인쇄합니다). -l은 패턴과 일치하는 행을 포함하는 파일을 나열하고 -L은 패턴을 포함하지 않는 파일을 나열합니다. – jkasnicki

+0

파일 확장자 처리를 위해 os.path.splitext를보십시오. (http://docs.python.org/library/os.path.html#os.path.splitext) – gimel

답변

1

확인하려면 문자열은 s이라는 이름으로 묶여 있으며, 가장 단순합니다 (그리고 가장 합리적으로 허용되는 문자열) 크기의 파일) 당신의 os.walk 루프에서

with open(f) as fp: 
    if s in fp.read(): 
     print '%s has the string' % f 
    else: 
     print '%s doesn't have the string' % f 

같은, 당신이 그렇게 별도로 루트 경로와 파일 이름을 가지고있다

f = os.path.join(path, name) 

(당신이 무조건 인쇄하는지) 열려는 경로는 확인하십시오.

+0

설명에 감사드립니다. test.py:22 : 경고 : 는 불행히도 나는이를 실행하는 몇 가지 문제를 가지고 '과'2.6 내가 다음 python2.6로 실행 파이썬에서 예약 된 키워드되고, 다른 오류 얻을 것이다 : 을 에서 파일 "test.py", 줄 18 경우 f.read에서의() : AttributeError : 'STR'객체가 – thomytheyon

+0

더 이상 오류 감사를 '읽기'에는 속성이 없지만 아무것도 반환하지 않습니다 : – thomytheyon

+0

오타 (tx @ johnsy). 죄송합니다. @thomy, 나는'return' 대신에'print'를 사용하고 있습니다. 물론 그것을 편집 할 수 있습니다. 두 경우 모두 당신이 원하는 것입니다. –

0

파일 내용이 원본 파일에있는 텍스트와 일치하지 않는지 확인하는 파일 이름 호출 기능을 인쇄하는 대신. 그런 경우에 다음과 같이 check_file()을 사용합니다.

WARNING_RX = (
    (re.compile(r'if\s+\(!\s+user.hasPermission'), 'user.hasPermission'), 
    (re.compile(r'other regexp you want to have'), 'very important'), 
    ) 

def check_file(fn): 
    f = open(fn, 'r') 
    content = f.read() 
    f.close() 
    for rx, rx_desc in WARNING_RX: 
     if not rx.search(content): 
      print('%s: not found: %s' % (fn, rx_desc))