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
globde forma efectiva
TL;DR — Recetas Rápidas
| Tarea | Mejor método |
|---|---|
| Listar archivos (no recursivo) | os.listdir o pathlib.Path.iterdir() |
| Listar archivos recursivamente | os.walk o pathlib.Path.rglob() |
| Filtrar por extensión | pathlib.Path.rglob("*.csv") |
| Coincidencia por patrón | glob.glob() / pathlib.Path.rglob("*pattern*") |
| Mejor opción general | pathlib |
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.listdirpara exploraciones simples de directoriosos.walkpara recorrido recursivo- Filtrado de archivos por extensión
- Manejo de tipos de archivo especiales como imágenes y videos
globpara 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")