Introduzione
Python ha alcuni moduli integrati che ti consentono di eliminare file e directory.
Questo tutorial spiega come cancellare file e directory utilizzando le funzioni dei moduli os
, pathlib
e shutil
.
Eliminare i file
In Python è possibile utilizzare os.remove()
, os.unlink()
, pathlib.Path.unlink()
per cancellare un singolo file.
Il modulo os
fornisce un modo portatile di interagire con il sistema operativo. Il modulo è disponibile per Python 2 e 3.
Per eliminare un singolo file con os.remove()
, passa il percorso al file come argomento:
import os
file_path = '/tmp/file.txt'
os.remove(file_path)
Le funzioni os.remove()
e os.unlink()
sono semanticamente identiche:
import os
file_path = '/tmp/file.txt'
os.unlink(file_path)
Se il file specificato non esiste, viene generato un errore FileNotFoundError
. Entrambe le funzioni os.remove()
e os.unlink()
possono eliminare solo i file, non le directory. Se il percorso indicato punta a una directory, genereranno un errore IsADirectoryError
.
L'eliminazione di un file richiede un'autorizzazione di scrittura ed esecuzione sulla directory contenente il file. Altrimenti, riceverai un errore PermissionError
.
Per evitare errori durante l'eliminazione dei file, è possibile utilizzare la gestione delle eccezioni per rilevare l'eccezione e inviare un messaggio di errore corretto:
import os
file_path = '/tmp/file.txt'
try:
os.remove(file_path)
except OSError as e:
print("Error: %s : %s" % (file_path, e.strerror))
Il modulo pathlib
è disponibile in Python 3.4 e versioni successive. Se si desidera utilizzare questo modulo in Python 2, è possibile installarlo con pip. pathlib
fornisce un'interfaccia orientata agli oggetti per lavorare con percorsi di filesystem per diversi sistemi operativi.
Per eliminare un file con il modulo pathlib
, creare un oggetto Path
che punta al file e chiamare il metodo unlink()
sull'oggetto:
from pathlib import Path
file_path = Path('/tmp/file.txt')
try:
file_path.unlink()
except OSError as e:
print("Error: %s : %s" % (file_path, e.strerror))
pathlib.Path.unlink()
, os.remove()
e os.unlink()
possono essere utilizzati anche per eliminare un collegamento simbolico.
Corrispondenza del modello
È possibile utilizzare il modulo glob per abbinare più file in base a un modello. Ad esempio, per rimuovere tutti i file .txt
nella directory /tmp
, dovresti usare qualcosa del genere:
import os
import glob
files = glob.glob('/tmp/*.txt')
for f in files:
try:
f.unlink()
except OSError as e:
print("Error: %s : %s" % (f, e.strerror))
Per eliminare in modo ricorsivo tutti i file .txt
nella directory /tmp
e tutte le sottodirectory sottostanti, passa l'argomento recursive=True
alla funzione glob()
e usa il modello ``**`:
import os
import glob
files = glob.glob('/tmp/**/*.txt', recursive=True)
for f in files:
try:
os.remove(f)
except OSError as e:
print("Error: %s : %s" % (f, e.strerror))
Il modulo pathlib
include due funzioni glob glob()
e rglob()
per abbinare i file in una determinata directory. glob()
corrisponde ai file solo nella directory di livello superiore. rglob()
trova ricorsivamente tutti i file nella directory e tutte le sottodirectory. Il seguente codice di esempio elimina tutti i file .txt
nella directory /tmp
:
from pathlib import Path
for f in Path('/tmp').glob('*.txt'):
try:
f.unlink()
except OSError as e:
print("Error: %s : %s" % (f, e.strerror))
Eliminare le directory (cartelle)
In Python è possibile utilizzare os.rmdir()
e pathlib.Path.rmdir()
per eliminare una directory vuota e shutil.rmtree()
per eliminare una directory non vuota.
L'esempio seguente mostra come rimuovere una directory vuota:
import os
dir_path = '/tmp/img'
try:
os.rmdir(dir_path)
except OSError as e:
print("Error: %s : %s" % (dir_path, e.strerror))
In alternativa, puoi eliminare le directory con il modulo pathlib
:
from pathlib import Path
dir_path = Path('/tmp/img')
try:
dir_path.rmdir()
except OSError as e:
print("Error: %s : %s" % (dir_path, e.strerror))
Il modulo shutil
consente di eseguire numerose operazioni di alto livello su file e directory.
Con la funzione shutil.rmtree()
è possibile eliminare una determinata directory incluso il suo contenuto:
import shutil
dir_path = '/tmp/img'
try:
shutil.rmtree(dir_path)
except OSError as e:
print("Error: %s : %s" % (dir_path, e.strerror))
L'argomento passato a shutil.rmtree()
non può essere un collegamento simbolico a una directory.
Conclusione
Python fornisce diversi moduli per la gestione dei file.
Abbiamo visto come utilizzare os.remove()
, os.unlink()
e pathlib.Path.unlink()
per eliminare un singolo file, os.rmdir()
e pathlib.Path.rmdir()
per cancellare una directory vuota e shutil.rmtree()
per cancellare ricorsivamente una directory e tutto il suo contenuto.
Prestare particolare attenzione durante la rimozione di file o directory, perché una volta che il file è stato eliminato, non può essere facilmente recuperato.