Skip to content

Python Obtener Todos los Archivos de un Directorio: Guía Completa y Eficiente

Updated on

Listar archivos en un directorio es una de las tareas más comunes en Python, ya sea que estés organizando datos, preprocesando archivos o automatizando flujos de trabajo.

En esta guía actualizada aprenderás:

  • Cómo listar archivos usando os.listdir
  • Cómo listar archivos recursivamente con os.walk
  • Cómo filtrar archivos por extensión
  • Cómo listar imágenes, videos o tipos de archivos específicos
  • La forma moderna: hacer todo esto con pathlib, el enfoque recomendado hoy en día
  • Cómo usar patrones glob de forma efectiva

TL;DR — Recetas Rápidas

TareaMejor método
Listar archivos (no recursivo)os.listdir o pathlib.Path.iterdir()
Listar archivos recursivamenteos.walk o pathlib.Path.rglob()
Filtrar por extensiónpathlib.Path.rglob("*.csv")
Coincidencia por patrónglob.glob() / pathlib.Path.rglob("*pattern*")
Mejor opción generalpathlib

1. Usando os.listdir (Básico, No Recursivo)

La función os.listdir devuelve nombres de archivos y carpetas dentro de un directorio, pero no entra en subcarpetas.

import os
 
def list_files(directory):
    return os.listdir(directory)
 
print(list_files("/path/to/your/directory"))

Esto te da todas las entradas en el directorio, pero no podrás filtrar ni recorrer recursivamente sin lógica adicional. Para la mayoría del código moderno en Python, considera pathlib (secciones siguientes), aunque esto sigue siendo útil para scripts rápidos.


2. Listar Todos los Archivos Recursivamente con os.walk

Para recorrer todos los subdirectorios y listar todos los archivos:

import os
 
def list_files_recursively(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            print(os.path.join(root, file))
 
list_files_recursively("/path/to/your/directory"))

os.walk es potente y eficiente en memoria, lo que lo hace ideal para árboles de directorios grandes.


3. Filtrar Archivos por Extensión

Puedes filtrar durante el recorrido:

import os
 
def list_files_by_extension(directory, extension):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(extension):
                print(os.path.join(root, file))
 
list_files_by_extension("/path/to/your/directory", ".json")

Usa (".jpg", ".png") para múltiples extensiones.


4. Listar Archivos de Imagen o Video

Listar imágenes:

import os
 
def list_image_files(directory):
    image_ext = (".jpg", ".jpeg", ".png", ".gif", ".webp")
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.lower().endswith(image_ext):
                print(os.path.join(root, file))
 
list_image_files("/path/to/your/directory")

Listar videos:

import os
 
def list_video_files(directory):
    video_ext = (".mp4", ".avi", ".mov", ".mkv")
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.lower().endswith(video_ext):
                print(os.path.join(root, file))
 
list_video_files("/path/to/your/directory")

NUEVO: La Forma Moderna — Usando pathlib (Recomendado)

Desde Python 3.4+, pathlib es la forma preferida de trabajar con rutas. Es más legible y potente que os.path.

Listar todos los archivos (no recursivo):

from pathlib import Path
 
def list_files(directory):
    return [p for p in Path(directory).iterdir() if p.is_file()]
 
print(list_files("/path/to/dir"))

Listar todos los archivos recursivamente:

from pathlib import Path
 
def list_files_recursive(directory):
    return list(Path(directory).rglob("*"))
 
print(list_files_recursive("/path/to/dir"))

Filtrar por extensión:

from pathlib import Path
 
for file in Path("/path/to/dir").rglob("*.json"):
    print(file)

Filtrar múltiples tipos:

from pathlib import Path
 
extensions = ("*.jpg", "*.png", "*.jpeg")
for ext in extensions:
    for file in Path("path/to/dir").rglob(ext):
        print(file)

Pathlib hace que esto sea extremadamente limpio.


5. Coincidencia de Patrones con glob

glob es perfecto cuando necesitas coincidencias con comodines al estilo de la terminal:

import glob
 
json_files = glob.glob("/path/to/your/directory/**/*.json", recursive=True)
 
print(json_files)

Patrones útiles:

  • "*.csv"
  • "data_*"
  • "**/*.jpg" (recursivo)

Conclusión

En esta guía aprendiste varias formas de listar archivos en Python:

  • os.listdir para exploraciones simples de directorios
  • os.walk para recorrido recursivo
  • Filtrado de archivos por extensión
  • Manejo de tipos de archivo especiales como imágenes y videos
  • glob para búsquedas con comodines
  • pathlib — el enfoque moderno y recomendado

Ya sea que estés limpiando datos, creando scripts de automatización de archivos o trabajando en flujos de trabajo de machine learning, estas técnicas te ayudarán a escribir código Python más limpio, rápido y mantenible.


Preguntas Frecuentes (FAQs)

¿Cómo obtengo todos los archivos de un directorio usando Python?

Usa:

os.listdir(path)

o la opción moderna:

Path(path).iterdir()

¿Cómo listo todos los archivos de forma recursiva?

Usa:

os.walk(path)

o:

Path(path).rglob("*")

¿Cómo filtro archivos por extensión?

Usa:

file.endswith(".json")

o:

Path(path).rglob("*.json")