2011-04-29 5 views
0

나는 함께 파이어 링 한 파이썬 스크립트를 가지고있다.파이썬에서 트리를 재귀하는 동안 .hg/.git/.svn 디렉토리를 건너 뛰는 방법

스크립트는 XCode 프로젝트 파일을 찾는 폴더를 되풀이합니다. 스크립트는 정상적으로 작동하지만 소스 저장소를 수정하지 않도록 모든 .svn (또는 .hg 또는 .git) 폴더를 건너 뛰도록이 스크립트를 적용하고 싶습니다. 여기

는 반복 검색 내가 저장소 하위 트리를 제외 할 수 있습니다 방법

for root, dirnames, files in os.walk('.'): 
    files = [f for f in files if re.search("project\.pbxproj", f)] 
    for f in files: 
     filename = os.path.join(root, f) 
     print "Adjusting BaseSDK for %s" % (filename) 
     ... 

위한 스크립트입니다?

+8

os.walk 설명서를 보셨습니까? http://docs.python.org/library/os.html#os.walk. 정확한 해결책은 문서에 있습니다. 'dirnames.remove (". svn")' –

+0

프로젝트의 모든 .svn 파일을 삭제하려면 여기를 클릭하십시오. [svn export] (http://svnbook.red-bean.com/en/) 1.5/svn.ref.svn.c.export.html)는 스크립트가 필요없이이 작업을 수행합니다 (예 : 삭제해야하는 프로젝트의 루트에 하나의 폴더 만 있음). – moritz

+0

@ S.Lott 문서에서 해당 지점을 지적 해 주셔서 감사합니다. 왜 내가 전에 그것을 놓쳤는 지 잘 모르겠다. –

답변

5

그의 의견에, 이것은 os.walk에 대한 문서에서 언급했다. 다음은 정상적으로 작동합니다.

for root, dirs, files in os.walk("."): 
    if ".hg" in dirs: 
     dirs.remove(".hg") 
    for f in files: 
     print os.path.join(root, f) 
0

파일을 처리하기 전에 파일 이름의 첫 번째 문자가 "."로 시작하는지 확인할 수 있습니다. 그렇다면 루프의 다음 항목으로 계속 진행합니다. S. 로트로

for root, dirnames, files in os.walk('.'): 
    files = [f for f in files if re.search("project\.pbxproj", f)] 
    for f in files: 
     ### EDIT START 
     if f[0] == ".": 
      continue 
     ### EDIT FINISH 

     filename = os.path.join(root, f) 
     print "Adjusting BaseSDK for %s" % (filename) 
+0

.hg, .git, .svn은 폴더입니다. 위의 질문에 대한 의견도 참조하십시오. – manojlds

관련 문제