2014-04-15 2 views
0

이것은 내가에 대한 중첩을 시도폴더 파이썬의 모든 중첩 된 디렉토리를 가져

import os 
x = os.walk('.').next()[1] 

print x # prints ['33', '18', '27', '39', '2', '62', '25'] 

for a in x: 
    y = os.walk(a).next()[1] 

print y # prints ['files'] 

파일 내에서 모든 디렉토리의 전체 경로 이름을 얻으려고 노력하고있는 디렉토리 구조

10 
    files 
    2009 
    2010 
11 
    files 
    2007 
    2010 
    2006 

하지만, 중지 오류가 발생했습니다.

내가 뭘하려는거야 것은

['10/files/2009','10/files/2010','11/files/2007','11/files/2010','10/files/2006'] 

어떻게 파이썬에서 그것을 할, 아래 같은 것을 얻을 수있다?

답변

1

가장 깊게 중첩 된 디렉토리 만 원하는 것처럼 보입니다. topdown=False 매개 변수를 사용하면 가장 먼저 중첩 된 디렉토리를 상위 디렉토리 앞에 나열하는 깊이 우선 탐색을 수행합니다.

import os 

def listdirs(path): 
    seen = set() 
    for root, dirs, files in os.walk(path, topdown=False): 
     if dirs: 
      parent = root 
      while parent: 
       seen.add(parent) 
       parent = os.path.dirname(parent) 
     for d in dirs: 
      d = os.path.join(root, d) 
      if d not in seen: 
       yield d 

for d in listdirs('.'): 
    print(d) 
+1

왜'하향식를 = FALSE '를 : 당신이 상위 디렉토리를 추적 할 세트를 사용할 수 그보고를 생략 할 수 있도록

는 높은 수준의 디렉토리를 필터링하려면? – ooga

관련 문제