Recorriendo un árbol de directorios
Digamos que desea cambiar el nombre de cada archivo en alguna carpeta y también cada archivo en cada subcarpeta de esa carpeta. Es decir, desea recorrer el árbol de directorios, tocando cada archivo a medida que avanza. Escribir un programa para hacer esto podría ser complicado; afortunadamente, Python proporciona una función para manejar este proceso por usted.
Miremos la carpeta C:\delicious
con su contenido, que se muestra en la Figura 10-1 .

Aquí hay un programa de ejemplo que usa la función os.walk()
en el árbol de directorios de la Figura 10-1 :
import os
for folderName, subfolders, filenames in os.walk('C:\\delicious'):
print('The current folder is ' + folderName)
for subfolder in subfolders:
print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
for filename in filenames:
print('FILE INSIDE ' + folderName + ': '+ filename)
print('')
A la función os.walk()
se le pasa un único valor de cadena: la ruta de una carpeta. Puede usar os.walk()
en una instrucción de bucle for
para recorrer un árbol de directorios, de forma similar a como puede usar la función range()
para recorrer un rango de números. A diferencia de range()
, la función os.walk()
devolverá tres valores en cada iteración a través del ciclo:
- Una cadena del nombre de la carpeta actual
- Una lista de cadenas de las carpetas en la carpeta actual
- Una lista de cadenas de los archivos en la carpeta actual
(Por carpeta actual, me refiero a la carpeta para la iteración actual del bucle for
. El directorio de trabajo actual del programa no se modifica con os.walk()
) .
Al igual que puede elegir el nombre de la variable i
en el código for i in range(10):
, también puede elegir los nombres de las variables para los tres valores enumerados anteriormente. Usualmente uso los nombres foldername
, subfolders
, y filenames
.
Cuando ejecute este programa, generará lo siguiente:
The current folder is C:\delicious
SUBFOLDER OF C:\delicious: cats
SUBFOLDER OF C:\delicious: walnut
FILE INSIDE C:\delicious: spam.txt
The current folder is C:\delicious\cats
FILE INSIDE C:\delicious\cats: catnames.txt
FILE INSIDE C:\delicious\cats: zophie.jpg
The current folder is C:\delicious\walnut
SUBFOLDER OF C:\delicious\walnut: waffles
The current folder is C:\delicious\walnut\waffles
FILE INSIDE C:\delicious\walnut\waffles: butter.txt.
Dado que os.walk()
devuelve listas de cadenas para las variables de subfolders
y filenames
, puede usar estas listas en sus propios bucles for
. Reemplace las llamadas a la función print()
con su propio código personalizado. (O si no necesita uno o ambos, elimine los bucles for
).