2011-03-06 12 views
18

Qui ci sono quattro percorsi: possono o non possono esisteremodo elegante per fare tutte le dirs in un percorso

p1=r'\foo\bar\foobar.txt' 
p2=r'\foo\bar\foo\foo\foobar.txt' 
p3=r'\foo\bar\foo\foo2\foobar.txt' 
p4=r'\foo2\bar\foo\foo\foobar.txt' 

Le directory su un'unità. Quale sarebbe il modo più elegante per creare le directory in ogni percorso?

Stavo pensando di utilizzare os.path.split() in un ciclo e di cercare una directory con os.path.exists, ma non lo so c'è un approccio migliore.

+0

Quasi: https://stackoverflow.com/q/6004073/1959808 –

risposta

33

Stai cercando os.makedirs() che fa esattamente quello che ti serve.

Gli stati di documentazione:

ricorsiva funzione di creazione di directory. Come mkdir(), ma rende necessarie tutte le directory di livello intermedio per contenere la directory foglia. Solleva un'eccezione di errore se la directory foglia esiste già o non può essere creata .

Poiché non funziona se la directory foglia esiste già, è necessario verificarne l'esistenza prima di chiamare os.makedirs().

+0

Lol. 1: 0 per Python. Non posso credere che mi sia mancato e che stavo usando 'os.mkdir()' esclusivamente. Grazie, David :) – marw

+0

@marw Non ne avevo mai sentito parlare, ho appena fatto un websearch con la parola chiave magica "ricorsiva"! Il test –

+2

all'esistenza introduce una possibile condizione di competizione (la directory potrebbe essere creata * dopo * che ne è stata verificata l'esistenza * prima * la chiamata a 'makedirs()'). Quindi usa "prova: .. eccetto OSError" senza il test. – jfs

1

In Python 3.6 e versioni successive si può fare:

import pathlib 

path = pathlib.Path(p4) 
path.parent.mkdir(parents=True, exist_ok=True) 
+2

Il modulo pathlib ha bisogno di una campagna pubblicitaria. È fantastico. –

+0

@RickTeachey non potrebbe essere più d'accordo – axwell

Problemi correlati