Publicidad

Cómo recorrer directorios y subdirectorios recursivamente en python


Por Alex el 05/01/2023 , Comentar el artículo

Comparte este artículo:      




En Python hay varias formas de leer los ficheros de un directorio. Pero para leerlos recursivamente lo mejor es crear una función recursiva.


El código necesario para recorrer ficheros es muy sencillo, os lo pongo a continuación comentado, aquí tenéis el repositorio con el código https://github.com/depruebas/python-find-files-recursive

# Importamos el modulo de sistema
import os

# Creamos una función recursiva para buscar los ficheros
# a partir de una ruta que le pasamos en "directory"
def search_files(directory):
  
  # Recorremos todos los ficheros del directorio
  for file in os.listdir(directory):
    
    # En directory tenemos el path y en file el nombre del fichero
    full_path = os.path.join(directory, file)
    
    # Si es un directorio lo que encontramos volvemos hacer la llamada
    # a la funcion para recorrer el nuevo directorio
    if os.path.isdir(full_path):
      search_files(full_path)
    else:
      # So no escribimos por pantalla la ruta/fichero.
      print(full_path)

# Llamamos a la funcion con la ruta a partir de la que recorrer un directorio
# y sus subdirectorios
search_files('/home/depruebas/Imágenes')

En el repositorio de github os he dejado el código (recursive.py)

Ahora podemos arreglar este código y buscar ficheros con una extensión determinada.

En la línea 23 donde pone print(full_path) vamos a cambiar y poner un filtro para buscar solo los que tiene extensión .jpg

if full_path.endswith('.jpg') print(full_path)

Y podemos ajustar la búsqueda un poco más buscando n extensiones pasando una lista de extensiones, con lo que el script quedará así:

# Segundo ejemplo del artículo
# con los filtros por extensiones

# Importamos el modulo de sistema
import os

# Creamos una función recursiva para buscar los ficheros
# a partir de una ruta que le pasamos en "directory"
def search_files(directory, extensiones):
  
  # Recorremos todos los ficheros del directorio
  for file in os.listdir(directory):
    
    # En directory tenemos el path y en file el nombre del fichero
    full_path = os.path.join(directory, file)
    
    # Si es un directorio lo que encontramos volvemos hacer la llamada
    # a la funcion para recorrer el nuevo directorio
    if os.path.isdir(full_path):
      search_files(full_path, extensiones)
    else:
      # Sino escribimos por pantalla la ruta/fichero.
      for extension in extensiones:
        if full_path.endswith(extension):
          print(full_path)
          break

# Llamamos a la función con la ruta a partir de la que recorrer un directorio
# y sus subdirectorios
search_files('/home/depruebas/Imágenes', ['.jpg', '.png'])


El fichero en el github es recursive_ext.py

Que hemos cambiado a la llamada a la función le hemos añadido una lista de extensiones.

search_files('/home/depruebas/Imágenes', ['.jpg', '.png'])

En la definición de la función añadido el parámetro extensiones

def search_files(directory, extensiones):

En la llamada recursiva a la función añadido las extensiones que buscamos

search_files(full_path, extensiones)

Y finalmente por cada una de las extensiones miramos si es el fichero encontrado

for extension in extensiones:
 if full_path.endswith(extension):
  print(full_path)
  break



Y esto es todo amigos, feliz programming
Saludos
Alex.



Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.