Listar un directorio de forma recursiva en Python

Listar directorio de manera recursiva en Python

¿Quieres ser expert@ en Python? 🐍

❤️ He ayudado a miles de programadores/as como tú a ser mejores Pythonistas

📩 Recibe de vez en cuando trucos, scripts y tutoriales Python en español

🥇 Accede a nuestra comunidad privada de Slack: Pythonistas-es

* Al enviar el formulario confirmas que aceptas la POLITICA DE PRIVACIDAD

Este tutorial te mostrará una forma muy sencilla de listar un directorio de forma recursiva en Python, de manera que puedas acceder al árbol completo de carpetas y ficheros.

Tomaremos como referencia la siguiente estructura de directorios:

+ ejemplo
|_ + dir_a
     |_ fichero2.txt
     |_ fichero3.txt
|_ + dir_b
     |_ fichero4.txt
|_ documento.txt
|_ fichero1.txt
|_ imagen.jpg

Listar un directorio de manera recursiva con walk

Python pone a nuestra disposición la función walk() del módulo os para recorrer un árbol de directorios de forma recursiva. Esta función permite recorrer una estructura de directorios siguiendo una estrategia de arriba a abajo o de abajo a arriba. Por defecto es de arriba a abajo. Esto quiere decir que en primer lugar se lista el contenido del directorio actual, a continuación el de los directorios que se encuentran en el primer nivel, seguidamente los del segundo y, así, sucesivamente.

walk() recibe como argumento la ruta a partir de la cuál se accede al contenido. Si no se especifica, se toma como referencia el directorio actual. La función devuelve un iterador que, en cada iteración, devuelve tres valores: el nombre de la ruta completa del directorio actual, la lista de directorios del directorio actual y la lista de ficheros del directorio actual.

Veamos cómo usar walk() para listar el árbol de directorios del ejemplo de forma recursiva y mostrar el nombre de los ficheros de cada una de las carpetas:

import os

ejemplo_dir = '/Users/Juanjo/ejemplo/'

for nombre_directorio, dirs, ficheros in os.walk(ejemplo_dir):
    print(nombre_directorio)
    for nombre_fichero in ficheros:
        print(nombre_fichero)

El resultado del script anterior es el siguiente:

/Users/Juanjo/ejemplo/
documento.txt
imagen.jpg
fichero1.txt
/Users/Juanjo/ejemplo/dir_b
fichero4.txt
/Users/Juanjo/ejemplo/dir_a
fichero2.txt
fichero3.txt

Como puedes apreciar, se lista el directorio de forma recursiva comenzando en primer lugar por el directorio ejemplo y, a continuación, los directorios dir_b y dir_a.

Modificar el comportamiento por defecto de walk

Podemos utilizar una estrategia de abajo a arriba pasando el argumento topdown=False:

import os

ejemplo_dir = '/Users/Juanjo/ejemplo/'

for nombre_directorio, dirs, ficheros in os.walk(ejemplo_dir, topdown=False):
    print(nombre_directorio)
    for nombre_fichero in ficheros:
        print(nombre_fichero)

En esta ocasión, la salida del script es:

/Users/Juanjo/ejemplo/dir_b
fichero4.txt
/Users/Juanjo/ejemplo/dir_a
fichero2.txt
fichero3.txt
/Users/Juanjo/ejemplo/
documento.txt
imagen.jpg
fichero1.txt

Si te fijas, esta vez se muestra primero el contenido de los directorios más profundos del árbol.

Por defecto, walk() no sigue los enlaces simbólicos que encuentre en un directorio. Para ello, hay que llamar a la función pasando el argumento followlinks=True.

Conclusiones

Ya has visto que es muy fácil listar un directorio de forma recursiva en Python con walk().

Si lo que buscas es, simplemente, cómo recorrer el contenido de un directorio, puedes consultar este otro artículo.

¿Te ha gustado? Ayúdame a compartirlo 🤗

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn

¿Quieres ser expert@ en Python? Recibe trucos Python y accede a nuestro espacio privado de Slack

¡Eyyy! Esto también te puede interesar 👇

* Te informo de que los datos de carácter personal que proporciones al comentar serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es moderar los comentarios. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en Disqus (disqus.com), mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos enviando un email a juanjo@j2logo.com. Encontrarás más información en la POLÍTICA DE PRIVACIDAD.

Deja una respuesta

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

Sobre j2logo

j2logo profile

Quiero ayudarte a que seas mejor programador/a, pero no uno cualquiera, sino uno de los top.

¿Quieres ser expert@ en PYTHON?

j2logo-pythonistas

❤️ He ayudado a miles de programadores/as como tú

📩 Recibe trucos, scripts y tutoriales Python

🥇 Accede a nuestra comunidad privada de Slack