Puoi anche creare la directory se non è presente.
Fonte , se è ancora lì su SO.
================================================== ===================
Su Python ≥ 3.5, utilizzare pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
Per le versioni precedenti di Python, vedo due risposte con buone qualità, ognuna con un piccolo difetto, quindi darò la mia opinione su di essa:
Prova os.path.exists
e considera os.makedirs
la creazione.
import os
if not os.path.exists(directory):
os.makedirs(directory)
Come notato nei commenti e altrove, c'è una condizione di competizione: se la directory viene creata tra os.path.exists
le os.makedirs
chiamate e, os.makedirs
fallirà con un OSError
. Sfortunatamente, accattivanteOSError
e il proseguimento delle non è infallibile, in quanto ignorerà un errore nella creazione della directory a causa di altri fattori, come autorizzazioni insufficienti, disco intero, ecc.
Un'opzione sarebbe quella di intercettare OSError
ed esaminare il codice di errore incorporato (vedi Esiste un modo multipiattaforma per ottenere informazioni dall'OSError di Python ):
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
In alternativa, potrebbe esserci un secondo os.path.exists
, ma supponiamo che un altro abbia creato la directory dopo il primo controllo, quindi l'ha rimossa prima del secondo - potremmo ancora essere ingannati.
A seconda dell'applicazione, il pericolo di operazioni simultanee può essere maggiore o minore del pericolo rappresentato da altri fattori come le autorizzazioni per i file. Lo sviluppatore dovrebbe sapere di più sulla particolare applicazione in fase di sviluppo e sul suo ambiente previsto prima di scegliere un'implementazione.
Le versioni moderne di Python migliorano un po 'questo codice, sia esponendo FileExistsError
(in 3.3+) ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... e consentendo la chiamata di un argomento di parole chiaveos.makedirs
exist_ok
(in 3.2+).
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
invece, per vedere se la directory esiste sia ed è una directory nello stesso momento.