Python: Listado de archivos en un directorio - Guía para el desarrollo moderno

17 de junio de 2025

En el ámbito del desarrollo de software, las operaciones eficientes del sistema de archivos son fundamentales para crear aplicaciones sólidas. Tanto si estás desarrollando un canal de procesamiento de datos, un sistema de gestión de contenidos o una solución basada en la nube, la capacidad de listar archivos en un directorio es una tarea fundamental. Python, con su simplicidad y versatilidad, ofrece potentes herramientas para manejar este tipo de operaciones sin problemas. En esta guía, exploraremos cómo listar archivos en un directorio usando Python, profundizando en varios métodos, mejores prácticas y aplicaciones del mundo real. Como líder en el suministro de soluciones informáticas de vanguardia, Carmatec aprovecha las capacidades de Python para dotar a las empresas de software escalable y eficiente. ¡Vamos a sumergirnos!

Introducción a las operaciones del sistema de archivos en Python

Python es famoso por su facilidad de uso y su amplia biblioteca estándar, lo que lo convierte en un lenguaje de referencia para desarrolladores de todos los sectores. Las operaciones del sistema de archivos, como el listado de archivos en un directorio, son fundamentales para tareas como la ingesta de datos, la gestión de archivos y la automatización. Python ofrece varios módulos para interactuar con el sistema de archivos, como os, pathlib y glob. Cada módulo ofrece ventajas únicas que se adaptan a diferentes casos de uso y preferencias de los desarrolladores.

En Carmatec, somos conscientes de la importancia de elegir las herramientas adecuadas para cada trabajo. Nuestra experiencia en Desarrollo en Python nos permite crear soluciones que optimizan el rendimiento, la escalabilidad y el mantenimiento. En este artículo, vamos a cubrir:

  • Diferentes métodos para listar archivos en un directorio
  • Ejemplos prácticos de código con explicaciones
  • Tratamiento de errores y buenas prácticas
  • Técnicas avanzadas de filtrado y clasificación de archivos
  • Aplicaciones reales relevantes para la clientela de Carmatec
  • Consideraciones sobre el rendimiento de los sistemas a gran escala

Al final, conocerás a fondo cómo listar archivos en Python y cómo se pueden aplicar estas técnicas en el desarrollo profesional de software.

Método 1: Utilizar el os Módulo

El os es el enfoque tradicional de Python para interactuar con el sistema operativo. Proporciona funciones como os.listdir(), os.walk(), y os.scandir() para listar archivos y directorios.

Utilizando os.listdir()

El os.listdir() devuelve una lista de todas las entradas (archivos y directorios) de un directorio especificado. He aquí un ejemplo sencillo:

python
importar os

# Especifica la ruta del directorio
directorio = "C:/Usuarios/Documentos"

# Lista todas las entradas del directorio
entradas = os.listdir(directorio)

# Imprime las entradas
para entrada en entradas:
print(entrada)

Salida (ejemplo):

documento1.txt
foto.jpg
subcarpeta

Explicación:

  • os.listdir(directorio) devuelve una lista de cadenas que representan los nombres de archivos y directorios.
  • La función no distingue entre ficheros y directorios, por lo que es necesario realizar comprobaciones adicionales si sólo desea listar ficheros.

Para listar sólo archivos, puede combinar os.listdir() con os.path.isfile():

python
importar os

directorio = "C:/Usuarios/Documentos"

# Listar sólo archivos
files = [entry for entry in os.listdir(directory) if os.path.isfile(os.path.join(directory, entry))

para archivo en archivos:
print(archivo)

Salida (ejemplo):

documento1.txt
foto.jpg

Puntos clave:

  • Utilice os.path.join() para crear rutas de archivos independientes de la plataforma.
  • os.listdir() es sencillo pero limitado para recorrer sistemas de archivos complejos.
Utilizando os.scandir()

Introducido en Python 3.5, os.scandir() es más eficaz que os.listdir() porque devuelve un iterador de DirEntry que proporcionan metadatos como el tipo y el tamaño del archivo sin llamadas adicionales al sistema.

python
importar os

directorio = "C:/Usuarios/Documentos"

# Usa scandir para listar archivos
con os.scandir(directorio) como entradas:
    para entrada en entradas:
        if entrada.es_archivo():
            print(f "Archivo: {entrada.nombre}, Tamaño: {entrada.stat().st_tamaño} bytes")

Salida (ejemplo):

Archivo: document1.txt, Tamaño: 1024 bytes
Archivo: photo.jpg, Tamaño: 52428 bytes

Ventajas:

  • os.scandir() es eficiente en memoria para directorios grandes.
  • DirEntry proporcionan acceso directo a los metadatos de los archivos (p. ej, is_file(), stat()).

Método 2: Utilizar el pathlib Módulo

El pathlib introducido en Python 3.4, ofrece un enfoque orientado a objetos para las operaciones del sistema de archivos. Es moderno, intuitivo e independiente de la plataforma, lo que lo convierte en la opción preferida de muchos desarrolladores.

Listado de archivos con pathlib

A continuación se explica cómo listar archivos utilizando pathlib:

python
from pathlib import Ruta

# Especifica la ruta del directorio
directorio = Path("C:/Usuarios/Documentos")

# Lista todos los archivos del directorio
archivos = [entrada.nombre para entrada en directorio.iterdir() si entrada.es_archivo()]

para archivo en archivos:
    print(fichero)

Salida (ejemplo):

documento1.txt
foto.jpg

Explicación:

  • Ruta(directorio) crea un Ruta que representa el directorio.
  • iterdir() produce Ruta para cada entrada del directorio.
  • is_file() comprueba si la entrada es un archivo.
Listado recursivo con pathlib

Para listar los archivos de un directorio y sus subdirectorios, utilice glob() o rglob():

python
from pathlib import Ruta

directorio = Path("C:/Usuarios/Documentos")

# Lista todos los archivos de texto recursivamente
archivos_de_texto = directorio.rglob("*.txt")

for archivo en archivos_de_texto:
    print(fichero)

Salida (ejemplo):

C:\Usuarios\Documentos\documento1.txt
C:\Usuarios\Documentos\subcarpeta\notas.txt

Ventajas:

  • pathlib es más legible y elimina la necesidad de os.path.join().
  • Admite la concordancia de patrones con glob() y rglob().

Método 3: Utilizar el glob Módulo

El glob está diseñado para la comparación de archivos basada en patrones. Es ideal para filtrar archivos por patrones de extensión o nombre.

Uso básico de glob
python
importar glob

# Lista todos los archivos de texto de un directorio
ficheros_texto = glob.glob("C:/Usuarios/Documentos/*.txt")

para archivo en archivos_de_texto:
    print(fichero)

Salida (ejemplo):

C:\Usuarios\Documentos\documento1.txt

Búsqueda recursiva con glob

Para buscar de forma recursiva, utilice ** con recursivo=Verdadero:

python
importar glob

# Lista todos los archivos de texto de forma recursiva
text_files = glob.glob("C:/Usuarios/Documentos/**/*.txt", recursive=True)

para archivo en archivos_de_texto:
    print(archivo)

Salida (ejemplo):

C:\Usuarios\Documentos\documento1.txt
C:\Usuarios\Documentos\subcarpeta\notas.txt

Ventajas:

  • glob es excelente para filtrar archivos por patrones (por ejemplo, glob es excelente para filtrar archivos por patrones (por ejemplo, *.txt, *.jpg).
  • Es sencillo y se integra bien con otro código Python.

Tratamiento de errores y buenas prácticas

Cuando se listan archivos, pueden producirse errores como la falta de directorios o problemas de permisos. Un tratamiento adecuado de los errores garantiza un código robusto.

Ejemplo con tratamiento de errores
python
from pathlib import Ruta

def lista_archivos(ruta_directorio):
    try:
        directorio = Ruta(ruta_directorio)
        if not directorio.existe():
             print(f "Error: El directorio '{ruta_directorio}' no existe.")
             return
        if not directorio.es_dir():
            print(f "Error: '{ruta_directorio}' no es un directorio.")
            return
        para entrada en directorio.iterdir():
            if entrada.es_archivo():
                print(f "Archivo: {entrada.nombre}")
    except ErrorPermiso:
        print(f "Error: Permiso denegado para '{ruta_directorio}'.")
    excepto Exception como e:
        print(f "Error inesperado: {str(e)}")

# Prueba la función
list_files("C:/Usuarios/Documentos")
list_files("C:/Invalid/Directory")

Salida (ejemplo):

Archivo: document1.txt
Archivo: photo.jpg
Error: El directorio ‘C:\\NInvalid\Directory’ no existe.

Buenas prácticas:

  • Validar entradas: Compruebe si el directorio existe y es accesible.
  • Utilizar gestores de contexto: Utilice con para os.scandir() para garantizar la liberación de recursos.
  • Manejar excepciones: Captura errores específicos como PermissionError o FileNotFoundError.
  • Utilice pathlib para Código Moderno: Es más legible y portátil.
  • Errores de registro: En producción, registre los errores en un archivo o sistema de monitorización.

Técnicas avanzadas

Filtrar archivos por tamaño o tiempo de modificación

Para filtrar archivos en función de los metadatos, utilice os o pathlib:

python
from pathlib import Ruta
from datetime import datetime, timedelta

directorio = Path("C:/Usuarios/Documentos")
one_week_ago = datetime.now() - timedelta(days=7)

# Lista de archivos modificados en la última semana
archivos_recientes = [
    entrada.nombre para entrada en directorio.iterdir()
    if entrada.es_archivo() and datetime.fromtimestamp(entrada.stat().st_mtime) > una_semana_antigua
]

para archivo en archivos_recientes:
    print(archivo)
Clasificación de archivos

Ordena los archivos por nombre, tamaño o tiempo de modificación:

python
from pathlib import Ruta

directorio = Path("C:/Usuarios/Documentos")

# Ordena los archivos por tamaño (el más grande primero)
ficheros = ordenados(
    [entrada para entrada en directorio.iterdir() si entrada.is_archivo()],
    key=lambda x: x.stat().st_size,
    reverse=Verdadero
)

para archivo en archivos:
    print(f "Fichero: {fichero.nombre}, Tamaño: {fichero.stat().st_tamaño} bytes")

Aplicaciones reales en Carmatec

En Carmatec, aprovechamos las capacidades del sistema de archivos de Python para crear soluciones para diversos sectores. He aquí algunos ejemplos:

  • Tuberías de procesamiento de datos: Listar archivos en un directorio es fundamental para la ingesta de conjuntos de datos en proyectos de aprendizaje automático o análisis. Python glob ayuda a filtrar los archivos pertinentes (por ejemplo, CSV o JSON).
  • Sistemas de gestión de contenidos: Nuestras soluciones CMS utilizan listados de archivos para gestionar los activos multimedia, garantizando una recuperación y organización eficaces.
  • Scripts de automatización: Desarrollamos secuencias de comandos para supervisar los directorios en busca de archivos nuevos, activando flujos de trabajo como copias de seguridad o notificaciones.
  • Integración en la nube: En las aplicaciones basadas en la nube, listamos archivos en cubos de almacenamiento (por ejemplo, AWS S3) utilizando SDK de Python, adaptando la lógica de listado de directorios a los sistemas distribuidos.

Al combinar las herramientas de sistema de archivos de Python con nuestra experiencia en nube, IA y desarrollo web, Carmatec ofrece soluciones que impulsan el valor empresarial.

Consideraciones sobre el rendimiento

Cuando se listan archivos en directorios grandes (por ejemplo, miles de archivos), el rendimiento es importante. He aquí cómo optimizarlo:

  • Utilice os.scandir(): Es más rápido que os.listdir() para directorios grandes.
  • Evite metadatos innecesarios: Obtenga sólo los atributos de archivo necesarios (por ejemplo, el nombre) para reducir las llamadas al sistema.
  • Utilizar generadores: Métodos como pathlib.iterdir() y os.scandir() ceder entradas perezosamente, ahorrando memoria.
  • Paralelizar para directorios enormes: Para directorios masivos, utilice multiprocesamiento para paralelizar el listado de archivos (con precaución para evitar cuellos de botella de E/S).

Ejemplo de listado de ficheros paralelos:

python
from pathlib import Ruta
from multiprocessing import Pool

def procesar_archivo(entrada):
    if entrada.es_archivo():
        return entrada.nombre
    return Ninguno

directorio = Path("C:/Usuarios/Documentos")
archivos = directorio.iterdir()

con Pool() como pool:
    nombres_archivo = [nombre para nombre en pool.map(proceso_archivo, archivos) if nombre]

para archivo en nombres_archivo:
    print(archivo)

Conclusión

Listar los archivos de un directorio es una tarea aparentemente sencilla en la que se basan muchas aplicaciones complejas. Python os, pathlib, y glob ofrecen herramientas flexibles y potentes para gestionar esta tarea con eficacia. Siguiendo las mejores prácticas, como la gestión de errores, utilizando API modernas como pathlib, y optimizando el rendimiento, los desarrolladores pueden crear sistemas de archivos robustos.

En Carmatec, aprovechamos las capacidades de Python para ofrecer soluciones de software a la medida de las necesidades de nuestros clientes. Ya se trate de automatizar el procesamiento de archivos, crear canalizaciones de datos o desarrollar aplicaciones nativas en la nube, Nuestra experiencia garantiza resultados escalables y de alta calidad. Si desea aprovechar Python para su próximo proyecto, contacto carmatec hoy mismo para explorar cómo podemos transformar su visión en realidad.