Come cancellare file e cartelle in Python
Guida pratica tra pathlib, os e shutil

Eliminare file e directory in Python: tutte le opzioni a confronto
Esperienza diretta e consigli da chi ci è passato
Recentemente mi sono trovato in una situazione comune a molti sviluppatori: stavo scrivendo uno script Python per automatizzare la pulizia di una cartella di output dopo l’esecuzione di un processo. Nulla di complicato ma con un'attenzione in più alla gestione di directory vuote, directory piene, symbolic link e file non più esistenti. Per evitare eccezioni impreviste, ho deciso di approfondire con calma tutti i modi per cancellare file o cartelle in Python, così da avere un approccio solido. In questo articolo condivido in modo organizzato i vari approcci percorribili.
Il modo moderno: pathlib
Python dalla versione 3.4 offre pathlib
, una libreria orientata agli oggetti per gestire percorsi e file system. È elegante e molto leggibile.
La funzione unlink()
permette di cancellare un file o un collegamento simbolico. Se il file non esiste, lancia l'eccezione FileNotFoundError
.
from pathlib import Path
file_inutile = Path("report.txt")
file_inutile.unlink()
La funzione rmdir()
invece, permette di cancellare una directory vuota. Per quelle piene, serve un’altra soluzione (vedi shutil
che introduco più avanti).
cartella_vuota = Path("cartella_vuota")
cartella_vuota.rmdir()
Pulizia profonda: shutil.rmtree()
Quando una directory contiene altri file o sottocartelle e vuoi eliminarla completamente, la funzione giusta è rmtree()
.
Attenzione: cancella tutto senza chiedere conferma. È ottima, ma va usata con coscienza.
import shutil
shutil.rmtree("dati_vecchi")
Compatibilità: usare os
su versioni più vecchie
Se lavori con Python 3.3 o precedenti, pathlib
non è disponibile. In questo caso, puoi usare le funzioni del modulo os
.
Per rimuovere un file usa os.remove()
:
import os
os.remove("file_da_cancellare.txt")
Oppure os.unlink()
:
import os
os.unlink("link_simbolico")
os.remove()
e os.unlink()
fanno esattamente la stessa cosa. Il secondo nome è più "Unix-style", ma entrambi rimuovono un file generico (non solo link simbolici).
Per rimuovere una directory vuota usa os.rmdir()
. In caso di directory simboliche però fai attenzione perché, da quanto è emerso, con alcune versioni Windows non è garantito il funzionamento.
import os
os.rmdir("cartella_vuota")
Per rimuovere una catena di directory vuote usa os.removedirs()
. Questo comando proverà a rimuovere cartella_c
, poi cartella_b
, poi cartella_a
solo se tutte sono vuote. Se trova qualcosa dentro una delle directory intermedie, si ferma.
import os
os.removedirs("cartella_a/cartella_b/cartella_c")
Errori comuni e come evitarli
Uno degli errori più frequenti? Cercare di cancellare un file che non esiste più. In quel caso, Python solleva un'eccezione FileNotFoundError
.
Per evitarlo puoi procedere in due modi:
- Controllare prima dell'eliminazione se il file esiste. Considera però che tra il controllo e il comando di eliminazione il file potrebbe essere rimosso.
import os
if os.path.isfile("vecchio.log"):
os.remove("vecchio.log")
- Usare un blocco try-catch per gestire l'eccezione
try {
os.remove("vecchio.log")
} catch FileNotFoundError {
pass # tutto ok, il file è già sparito
}
Author: Fantantonio
Date: 28/06/2025
Categories: devtips