2011-04-28 253 views
31

Me gustaría navegar a través de la carpeta actual y todas sus subcarpetas y obtener todos los archivos con extensiones .htm | .html. He descubierto que es posible averiguar si un objeto es un directorio o un archivo de la siguiente manera:Buscar archivos y subcarpetas en Python

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 

y, al final, me gustaría tener todos los archivos y sus caminos en una matriz. ¿Es posible algo así?

+0

posible duplicado de [Cómo recorrer a través de los archivos en un directorio?] (Http://stackoverflow.com/questions/ 4918458/how-to-travelling-through-the-files-in-a-directory) –

+3

aunque la respuesta en este caso es mucho más corta y mejor. – Blackie123

Respuesta

84

Puede nosotros os.walk() para recorrer de forma recursiva a través de un directorio y todos sus subdirectorios:

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

Para construir una lista de estos nombres, se puede utilizar una lista por comprensión:

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

Uso newDirName = os.path.abspath(dir) para crear un nombre de ruta de directorio completo para el subdirectorio y luego enumerar su contenido como lo ha hecho con el padre (es decir, newDirList = os.listDir(newDirName))

Puede crear un método separado de su fragmento de código y llamarlo recursivamente a través de la estructura del subdirectorio. El primer parámetro es el nombre de ruta del directorio. Esto cambiará para cada subdirectorio.

Esta respuesta se basa en la documentación de la versión 3.1.1 de la Biblioteca de Python. Hay un buen ejemplo de este modelo en acción en la página 228 de la Referencia de la Biblioteca de Python 3.1.1 (Capítulo 10 - Acceso a archivos y directorios). ¡Buena suerte!

-2

versión ligeramente modificada de la solución de Sven Marnach ..


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

Por alguna razón hay espacios adicionales y la sangría de bloque no está bien en el engrudo anterior. El marcado de SO no me gusta. – campervancoder

+2

Pobre retrabajo de código simple: reemplazar la asignación de tupla con bucles incrustados hace que el código sea menos legible y probablemente menos eficiente también – volcano

+0

Gracias por el comentario @volcano .. El ejemplo anterior no parece funcionar, por lo tanto, el bucle adicional para .. – campervancoder

Cuestiones relacionadas