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 se path è un file, una directory o un collegamento simbolico valido.
  • os.path.isfile(path) - Restituisce vero se path è un file normale o di un collegamento simbolico a un file.
  • os.path.isdir(path) - Restituisce vero se path è 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.