# 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 extensionesdef search_files(directory, extensiones):
En la llamada recursiva a la función añadido las extensiones que buscamossearch_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.