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 .

imagen
Figura 10-1: Una carpeta de ejemplo que contiene tres carpetas y cuatro archivos

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 ).

Deja una respuesta