4. Come Navigare il File System

In questa lezione parleremo di una delle modalità più pratiche per navigare il filesystem del nostro computer con Python, grazie al modulo os e al suo metodo walk().


Il metodo walk() del modulo os

Finora abbiamo visto che volendo controllare il contenuto di una cartella, possiamo utilizzare la funzione listdir(), che però non fa distinzione tra file e sottocartelle, presenti nel percorso passato.

E in quelle situazioni in cui dobbiamo scansionare una parte sostanziosa del sistema, magari alla ricerca di un determinato tipo di file con cui vogliamo operare, potremmo combinare listdir() e altre funzioni, ma il procedimento diventerebbe abbastanza lungo.

Una delle modalità più veloci e pratiche per fare ciò è utilizzare invece la funzione walk() del modulo os, capirete bene come funziona a breve.

Questa analizza il percorso passato in maniera ricorsiva, cioè dove ogni analisi viene suggerita da quella precedente, cercando sottocartelle e file.

La funzione walk() viene usata in combinazione con i cicli for: ad ogni ciclo, abbiamo 3 elementi: la cartella in cui ci troviamo al momento, una lista delle sottocartelle presenti, e una lista dei file, al ciclo successivo la funzione entrerà in una delle sottocartelle e ripeterà il processo, questo prosegue fino a che non si arriva alla fine dell'albero.

Immaginiamo di voler scansionare la cartella in cui ci troviamo, e vogliamo avere un elenco esaustivo di file e sottocartelle e di tutti i file e le altre cartelle presenti al loro interno:

import os

for cartella, sottocartelle, files in os.walk(os.getcwd()):
    print(f"Ci troviamo nella cartella: '{cartella}'")
    print(f"Le sottocartelle presenti sono: '{sottocartelle}'")
    print(f"I files presenti sono: {files}")
    print()

Con questi file e sottocartelle potete poi fare tutto quello che volete, ad esempio: Supponiamo di voler andare alla ricerca di tutti i file .py presenti in questa sezione, e di ottenere quindi in output solamente un elenco di questi file, tralasciando tutti gli altri che verranno incontrati:

for cartella, sottocartelle, files in os.walk(os.getcwd()):
    print(f"Ci troviamo nella cartella: '{cartella}'")
    print(f"Le sottocartelle presenti sono: '{sottocartelle}'")
    for file in files:
        if file.endswith(".py"):
            print(file)
    print()

Io qui ho effettuato un esempio piuttosto semplice, ma capirete di certo che le potenzialità di questa funzione sono altissime!

Vi trovate con tantissimi strumenti a vostra disposizione, vi invito quindi ad esercitarvi cercando di essere creativi!