Python File Handling

Encontrar Archivos por Extensión en Python de Forma Eficiente

Spread the love

Encontrar archivos con extensiones específicas es una tarea común al trabajar con archivos en Python. Este artículo explora varios métodos eficientes y versátiles para lograr esto, atendiendo a diferentes necesidades y estilos de codificación. Cubriremos varios módulos y técnicas de Python, permitiéndole elegir el enfoque óptimo para su caso de uso específico.

Tabla de Contenidos

  1. Usando el módulo glob
  2. Aprovechando el módulo os
  3. Empleando pathlib para búsquedas en un solo directorio
  4. Búsqueda recursiva con os.walk
  5. Búsqueda recursiva con pathlib.rglob

1. Usando el módulo glob

El módulo glob ofrece una forma concisa de localizar archivos que coinciden con un patrón definido dentro de un solo directorio. Su función glob() devuelve una lista de rutas que satisfacen el patrón.


import glob

def find_files_with_extension_glob(directory, extension):
  """Encuentra archivos con una extensión dada usando glob.glob()."""
  return glob.glob(f"{directory}/*{extension}")

# Ejemplo:
files = find_files_with_extension_glob("./my_directory", ".txt")
print(files)

2. Aprovechando el módulo os

El módulo os proporciona un control más granular. os.listdir() lista todas las entradas en un directorio, permitiendo un filtrado personalizado.


import os

def find_files_with_extension_os(directory, extension):
  """Encuentra archivos con una extensión dada usando os.listdir()."""
  files = []
  for filename in os.listdir(directory):
    if filename.endswith(extension):
      files.append(os.path.join(directory, filename))
  return files

# Ejemplo:
files = find_files_with_extension_os("./my_directory", ".txt")
print(files)

3. Empleando pathlib para búsquedas en un solo directorio

El módulo pathlib proporciona un enfoque orientado a objetos. Su método glob() ofrece una sintaxis más limpia que glob.glob().


from pathlib import Path

def find_files_with_extension_pathlib(directory, extension):
  """Encuentra archivos con una extensión dada usando pathlib.glob()."""
  return list(Path(directory).glob(f"*{extension}"))

# Ejemplo:
files = find_files_with_extension_pathlib("./my_directory", ".txt")
print(files)

4. Búsqueda recursiva con os.walk

Para buscar subdirectorios, os.walk() recorre el árbol de directorios, permitiéndole comprobar cada archivo para la extensión deseada.


import os

def find_files_recursive_os(directory, extension):
    """Encuentra recursivamente archivos con una extensión dada usando os.walk()."""
    files = []
    for root, _, filenames in os.walk(directory):
        for filename in filenames:
            if filename.endswith(extension):
                files.append(os.path.join(root, filename))
    return files

# Ejemplo:
files = find_files_recursive_os("./my_directory", ".txt")
print(files)

5. Búsqueda recursiva con pathlib.rglob

El método rglob() de pathlib ofrece la solución más elegante para búsquedas recursivas.


from pathlib import Path

def find_files_recursive_pathlib(directory, extension):
  """Encuentra recursivamente archivos con una extensión dada usando pathlib.rglob()."""
  return list(Path(directory).rglob(f"*{extension}"))

# Ejemplo:
files = find_files_recursive_pathlib("./my_directory", ".txt")
print(files)

Recuerde crear una carpeta «my_directory» con algunos archivos .txt para que los ejemplos funcionen correctamente. Seleccione el método que mejor se adapte a su estilo de codificación y a las demandas del proyecto. Para búsquedas simples en un solo directorio, glob o pathlib.glob() son excelentes opciones. Para búsquedas recursivas, pathlib.rglob() proporciona la solución más concisa y legible.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *