Come cancellare file e cartelle in Python

Guida pratica tra pathlib, os e shutil


Come cancellare file e cartelle in Python

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:

  1. 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")
    
  1. Usare un blocco try-catch per gestire l'eccezione
    
try {
  os.remove("vecchio.log")
} catch FileNotFoundError {
  pass  # tutto ok, il file è già sparito
}
    

Se ti è piaciuto questo articolo e vorresti leggerne altri quando disponibili, considera di aggiungere il Feed RSS in un aggregatore di notizie come Feedly oppure salva questo sito tra i preferiti e torna quando vuoi 👋


Author: Fantantonio 

Date: 28/06/2025

Categories: devtips

Tags: python os pathlib shutil