2014-06-25 3 views
1

하드 드라이브를 크롤링하고 각 파일에 대한 정보를 수집하는 스크립트에 대해 작업하고 있습니다. fnmatch 및 magic을 통해 발생합니다.파이썬의 os.walk() 혼동을 통해 루핑

내가 yield_files(root)에 대한 루프 최초의 중첩은 불필요 느낌이

def yield_files(root): 

    for root, dirs, files in os.walk(root): 
     """ Is this necessary 

     for directory in dirs: 
      for filename in directory: 
       filename = os.path.join(root, filename) 
       if os.path.isfile(filename) or os.path.isdir(filename): 
        yield FileInfo(filename) 
     """ 

     for filename in files: 
      filename = os.path.join(root, filename) 
      if os.path.isfile(filename) or os.path.isdir(filename):    
       yield FileInfo(filename) 

모든 당신의 그

답변

2
def yield_files(root): 
    for root, dirs, files in os.walk(root): 
     for filename in files: 
      filename = os.path.join(root, filename) 
      if os.path.isfile(filename) or os.path.isdir(filename):    
       yield FileInfo(filename) 

어쨌든이 디렉토리에 재귀() endup를 os.walk 것 필요한 것. 나머지는 참으로 불필요합니다. os.walk은 하위 디렉토리로 이동하므로 현재 디렉토리의 경로가 필요하지 않습니다. 이제까지 완료 한 것처럼 경로 결합의 기본으로 root 만 있으면됩니다.