2011-02-04 2 views
1

interwebs와 여기에있는 글에서 os.walk는 디렉토리의 모든 하위 디렉토리와 파일을 찾는 최상의 선택 중 하나입니다. ,하지만 내가 가진 질문은 하위 디렉터리을 모두 찾으려면 os.walk가 가장 빠른 솔루션입니까?os.walk의 빠른 대안/사용법은 파이썬에서 모든 하위 디렉토리를 찾습니다.

os.walk에 대한 호출이 for root, dirs, files in os.walk(path)과 관련되어 있기 때문에 추가적으로 제 질문이 있다고 가정합니다. os.walk는 반드시 호출하지 않아도 실제로 모든 파일을 봅니까?

for root, dirs, files in os.walk(path): 
    for x in dirs: 
     DoStuffHere 

그러나 그것은 확실히 많은 많은 하위 디렉토리와 파일이있는 폴더에 느린 :

현재, 내 코드입니다.

감사합니다.

답변

2

나는이의 모든 측면에 있지만 내 이해의 특정 100 % 아니에요 : 당신이 디렉토리를 볼 때 일반적으로

파일 목록이 이미 디렉토리 메타 데이터에 포함되어 있으므로 데이터가 이미 존재 (리눅스, 시합 창은 확실하지 않음). 따라서 os.walk는 아마도이 작업을 수행하는 가장 빠르고 간단한 방법 일 수 있습니다.

또한 프로파일 링을 사용하지 않으면 os.walk이 정말로 느려지는 곳인지 알 수 있습니까? 일반적인 조언은 응용 프로그램/프로젝트를 코딩 한 다음 느린 부분을 찾아 프로파일 링하여 프로파일을 다시 작성하는 것임을 기억하십시오.

os.walk에서 os를 (를) 실행할 수 있습니다. . 대략 몇 천개의 디렉토리 + 70,000 개의 파일을 대략 몇 초 안에 볼 수 있으므로 필요에 따라 충분히 빠릅니다.

+0

네트워크 속도의 간단한 문제인 것처럼 보입니다. 걸 으려고하는 드라이브가 네트워크에 있습니다. 로컬 디렉토리에서 시도했지만 훨씬 빠릅니다. – Cryptite

+0

@Cryptite Ah, 네트워크 액세스가 느린 쪽을 향하게됩니다. – Pharaun