2009-02-10 2 views
3

os.walk()를 사용하여 디렉토리 트리를 탐색하는 python 스크립트를 작성하고 있습니다. 다른 파일 시스템에 마운트 된 하위 디렉토리를 건너 뛸 수있는 기능을 제공하고 싶습니다. find -xdev의 경우와 같습니다. os.walk()에 대한 문서를 살펴보면 자동으로 수행 할 인수가 없습니다. 내가 직접 필터링하는 데 사용할 수있는 것이 있습니까? Linux와 Mac OS X에서 모두 실행되기를 바랍니다.os.walk를 사용할 때 파이썬에서 서브 디렉토리가 같은 파일 시스템에 있는지 판별하는 방법이 있습니까?

답변

1

os.stat 호출과 os.walk에 의해 주어진 dirnames 필터링을 조합하여 사용할 수 있다고 생각합니다. 이런 식으로 뭔가 : 디렉토리 목록을 수정해야

import os 
for root, dirs, files in os.walk(somerootdir) : 
    do_processing(root, dirs, files) 
    dirs = [i for i in dirs if os.stat(os.path.join(root, i)).st_dev == os.stat(root).st_dev] 

같은 장치가없는 것들을 제거하여,로 재귀하는.

OS X에서 작동하는 방법에 대해서는 잘 모르겠지만 약간의 테스트를 거친 후 Linux에서 작동하는 것으로 보입니다.

+0

dirs 목록은 del 또는 slice 할당을 사용하여 수정해야합니다. 그렇지 않으면 os.walk에서 사용하는 dirs 목록을 변경하는 대신 로컬 변수 dir을 새 목록으로 리 바인드하기 만하면됩니다. – Constantin

관련 문제