Introduzione
Quando si scrivono script Python, è possibile che si desideri eseguire una determinata azione solo se esiste un file o una directory. Ad esempio, potresti voler leggere o scrivere dati in un file di configurazione o creare il file solo se non esiste già.
In Python, ci sono molti modi diversi per verificare l'esistenza di un file e determinare il tipo di file.
In questo tutorial, ti mostreremo tre diverse tecniche su come verificare l'esistenza di un file.
Controllare se il file esiste
Il modo più semplice per verificare l'esistenza di un file è provare ad aprire il file. Questo approccio non richiede l'importazione di alcun modulo e funziona con Python 2 e 3. Utilizzare questo metodo se si desidera aprire il file ed eseguire alcune azioni.
Lo snippet seguente utilizza un semplice blocco try-except. Stiamo provando ad aprire il file filename.txt
e, se il file non esiste, viene richiamata un'eccezione IOError
e viene stampato il messaggio "File not accessible":
try:
f = open("filename.txt")
# Do something with the file
except IOError:
print("File not accessible")
finally:
f.close()
Se stai usando Python 3, puoi anche usare al FileNotFoundError
posto di IOError
dell'eccezione.
Quando si aprono i file, si consiglia di utilizzare la parola chiave with
, che assicura che il file sia chiuso correttamente dopo il completamento delle operazioni sui file, anche se viene sollevata un'eccezione durante l'operazione. Inoltre, riduce il codice perché non è necessario chiudere il file utilizzando la funzione close
.
Il seguente codice è equivalente all'esempio precedente:
try:
with open('/etc/hosts') as f:
print(f.readlines())
# Do something with the file
except IOError:
print("File not accessible")
Negli esempi sopra, stavamo usando il blocco try-except e aprendo il file per evitare le race condition. Le race condition si verificano quando hai più di un processo di accesso allo stesso file.
Ad esempio, quando si controlla l'esistenza di un file, un altro processo può creare, eliminare o bloccare il file nell'intervallo di tempo tra il controllo e l'apertura del file. Ciò potrebbe causare la rottura del codice.
Controllare se il file esiste utilizzando il modulo os.path
Il modulo os.path
fornisce alcune utili funzioni per lavorare con i nomi dei percorsi. Il modulo è disponibile per Python 2 e 3.
Nel contesto di questo tutorial, le funzioni più importanti sono:
os.path.exists(path)
- Restituisce vero sepath
è un file, una directory o un collegamento simbolico valido.os.path.isfile(path)
- Restituisce vero sepath
è un file normale o di un collegamento simbolico a un file.os.path.isdir(path)
- Restituisce vero sepath
è una directory o un collegamento simbolico a una directory.
Il seguente codice verificherà se il file esiste filename.txt
:
import os.path
if os.path.isfile('filename.txt'):
print ("File exist")
else:
print ("File not exist")
Utilizzare questo metodo se si desidera solo verificare se il file esiste o meno. Se si desidera eseguire un'azione sul file, preferire utilizzare il metodo precedente.
Controllare se il file esiste utilizzando il modulo pathlib
Il modulo pathlib
è disponibile in Python 3.4 e versioni successive. Questo modulo fornisce un'interfaccia orientata agli oggetti per lavorare con percorsi di filesystem per diversi sistemi operativi.
Come nell'esempio precedente, il codice seguente controlla se il file filename.txt
esiste:
from pathlib import Path
if Path('filename.txt').is_file():
print ("File exist")
else:
print ("File not exist")
is_file
restituisce vero se path
è un file normale o di un collegamento simbolico a un file. Per verificare l'esistenza di una directory, utilizzare il metodo is_dir
.
La differenza principale tra pathlib
e os.path
è che pathlib
consente di lavorare con i percorsi come Path
oggetti con metodi e attributi pertinenti anziché oggetti normali str
.
Se vuoi usare questo modulo in Python 2 puoi installarlo con pip:
pip install pathlib2
Conclusione
In questa guida, ti abbiamo mostrato come verificare se esiste un file o una directory usando Python.