2011-04-28 2 views
31

현재 폴더와 모든 하위 폴더를 찾아보고 .htm | .html 확장명을 가진 모든 파일을 가져오고 싶습니다. 파이썬에서 파일 및 하위 폴더 찾아보기

import os 

dirList = os.listdir("./") # current directory 
for dir in dirList: 
    if os.path.isdir(dir) == True: 
    # I don't know how to get into this dir and do the same thing here 
    else: 
    # I got file and i can regexp if it is .htm|html 

하고 결국

, 나는 모든 파일과 배열의 자신의 경로를 가지고 싶다 : 나는 객체가이 같은 디렉토리 나 파일이 있는지 여부를 알 수 있다는 것을 발견했다. 그게 가능한가?

+0

가능한 중복 [디렉토리에있는 파일을 통해 통과하는 방법?] (http://stackoverflow.com/questions/ 4918458/how-to-travers-through-the-files-in-a-directory) –

+3

아직이 답변은 훨씬 짧고 좋습니다. – Blackie123

답변

84

당신은 우리 os.walk()는 재귀 적으로 디렉토리를 통해 반복 할 수 있습니다 및 모든 서브 디렉토리 :

htmlfiles = [os.path.join(root, name) 
      for root, dirs, files in os.walk(path) 
      for name in files 
      if name.endswith((".html", ".htm"))] 
2

사용 newDirName = os.path.abspath(dir) :

for root, dirs, files in os.walk(path): 
    for name in files: 
     if name.endswith((".html", ".htm")): 
      # whatever 

이러한 이름의 목록을 작성하려면, 당신은 지능형리스트를 사용할 수 있습니다 하위 디렉토리에 대한 전체 디렉토리 경로 이름을 작성한 다음 상위 항목 (예 : newDirList = os.listDir(newDirName))의 내용을 나열하십시오.

코드 단편의 별도 메소드를 작성하고 서브 디렉토리 구조를 통해 재귀 적으로 호출 할 수 있습니다. 첫 x 째 매개 변수는 디렉토리 경로 이름입니다. 이것은 각 서브 디렉토리에 대해 변경됩니다.

이 답변은 3.1.1 버전의 Python 라이브러리 문서를 기반으로합니다. Python 3.1.1 Library Reference (제 10 장 - 파일 및 디렉토리 액세스)의 228 페이지에서이 작업에 대한 좋은 모델 예제가 있습니다. 행운을 비네! 스벤 Marnach의 솔루션의

-2

약간 변형 된 버전 ..


import os

folder_location = 'C:\SomeFolderName' file_list = create_file_list(folder_location)

def create_file_list(path): return_list = []

for filenames in os.walk(path): for file_list in filenames: for file_name in file_list: if file_name.endswith((".txt")): return_list.append(file_name) return return_list

+0

어떤 이유로 여분의 공백이 있고 for 블록 들여 쓰기가 위의 붙여 넣기에 맞지 않습니다. SO의 마크 업은 저를 좋아하지 않습니다 .. – campervancoder

+2

단순한 코드의 불량한 작업 - 내장 루프가있는 튜플 할당을 바꾸는 것이 코드를 읽기 쉽지 않게 만들고 아마도 덜 효율적 너무 – volcano

+0

의견을 주셔서 감사합니다 @ volcano .. 위의 예제는 따라서 추가 for 루프 .. 작동하지 않았다 – campervancoder