2012-11-19 2 views
25

폴더 안에 들어있는 디렉토리 경로가있는 모든 파일을 나열해야합니다. 분명히 완벽한 솔루션이 될 os.walk을 사용하려고했습니다.숨겨진 폴더가없는 os.walk

그러나 숨겨진 폴더와 파일도 나열됩니다. 내 응용 프로그램이 숨겨진 폴더 나 파일을 나열하지 않도록하고 싶습니다. 숨겨진 파일을 만들지 않기 위해 사용할 수있는 플래그가 있습니까?

크로스 플랫폼은 단지 리눅스를 위해 작동하는 경우가 괜찮아, 나에게 정말 중요하지 않습니다 (. * 패턴)

+1

어떤 플랫폼 당신이 있습니까? '숨김'은 다른 운영 체제에서 다른 의미를 갖습니다. –

+0

저는 리눅스를 사용 중입니다. 답변에 추가하겠습니다. – lolopop

답변

56

아니, 사람들을 건너 뛸 수 있습니다 os.walk()하는 옵션이 없습니다. 당신은 (쉽게 충분하다) 그렇게 자신을 수행해야합니다 :

for root, dirs, files in os.walk(path): 
    files = [f for f in files if not f[0] == '.'] 
    dirs[:] = [d for d in dirs if not d[0] == '.'] 
    # use files and dirs 

참고 dirs[:] = 슬라이스 할당; 요소를 dirs (dirs이 아닌 목록)이 아닌 으로 바꿔 os.walk()이 삭제 된 디렉토리를 처리하지 않도록합니다. topdownTrue 경우

는 발신자가에서-장소 dirnames 목록을 수정할 수 있습니다 (아마도 del 또는 슬라이스 할당을 사용) : 당신이 documentation of os.walk()에서, Truetopdown 키워드 인수를 유지하는 경우

에만 작동 walk()은 이름이 인 서브 디렉토리에만 재귀됩니다.; 이를 사용하여 검색을 제거하거나 방문 순서를 지정하거나 walk()을 다시 시작하기 전에 호출자가 만들거나 이름을 바꾸는 디렉토리에 대해 walk()에 알릴 수도 있습니다.

+0

정말 고마워, 그 자리에서 목록을 수정할 수 있다는 것을 몰랐다! – lolopop

+0

나는 이것을 달았지만 아무 것도 콘솔에 출력하지 못했습니다. 이 방법으로 찾은 파일을 표시하는 일반적인 방법은 무엇입니까? 끝에'print root, dirs, files'을 추가했는데 아주 엉망이되었습니다. – user5359531

+1

@ user5359531 : 전적으로 귀하의 유스 케이스에 달려 있습니다. 당신은'print '할 수 있습니다. \ n'.join (dirs + files에서 f에 대해 [os.path.join (root, f)])'등 –

5

내가 질문에 요구되지 않은,하지만 난 특히, ____pycache__ 디렉토리를 시작 숨김 파일 및 파일을 모두 제외하고 싶었다 비슷한 문제가 있었다 알고 있습니다. 왜 내가 목록의 이해력이 내가 예상 한대로되지 않았는 지 알아 내려고했기 때문에 나는이 질문에 착수했다. 나는 목록을 dirnames[:]으로 수정하지 않았습니다.

나는 내가 제외하고 싶었 접두사의 목록을 작성과 같이 장소에 dirnames 수정 :

exclude_prefixes = ('__', '.') # exclusion prefixes 
    for dirpath, dirnames, filenames in os.walk(node): 
     # exclude all dirs starting with exclude_prefixes 
     dirnames[:] = [dirname 
         for dirname in dirnames 
         if not dirname.startswith(exclude_prefixes)] 
+0

위대한 해답입니다.리스트에 따라 제외하기 위해 완벽하게 작동합니다. – jpwynn

+1

참고로,'startswith'는 문자열의 튜플을 취할 수 있으므로 inner for 루프를 제거하고'not dirname.startswith (exclude_prefixes)'를 사용하십시오. https://docs.python.org/2/library/stdtypes .html # str.startswith (파이썬 2.5 이상) –