1046 Stimmen

mkdir -p Funktionalität in Python

Gibt es eine Möglichkeit, eine ähnliche Funktionalität zu erhalten wie mkdir -p auf der Shell aus Python heraus. Ich bin auf der Suche nach einer anderen Lösung als einem Systemaufruf. Ich bin sicher, der Code ist weniger als 20 Zeilen, und ich frage mich, ob jemand es bereits geschrieben hat?

0 Stimmen

Wie erreicht man die Entsprechung von "mkdir -p /home/Dokumente/Ordner/{Unterordner1,Unterordner2}" in os.command? Es erstellt einen Ordner als {Unterordner1,Unterordner2} anstelle von 2 verschiedenen Ordnern

0 Stimmen

1431voto

tzot Punkte 86792

Für Python 3.5, verwenden Sie pathlib.Path.mkdir :

import pathlib
pathlib.Path("/tmp/path/to/desired/directory").mkdir(parents=True, exist_ok=True)

El exist_ok Parameter wurde in Python 3.5 hinzugefügt.


Für Python 3.2, os.makedirs hat eine optionales drittes Argument exist_ok dass, wenn True ermöglicht die mkdir -p Funktionalität - es sei denn, mode bereitgestellt wird und das vorhandene Verzeichnis andere Berechtigungen als die vorgesehenen hat; in diesem Fall, OSError wird wie bisher erhoben:

import os
os.makedirs("/tmp/path/to/desired/directory", exist_ok=True)

Für noch ältere Versionen von Python können Sie os.makedirs und ignorieren Sie den Fehler:

import errno    
import os

def mkdir_p(path):
    try:
        os.makedirs(path)
    except OSError as exc:  # Python  2.5
        if exc.errno == errno.EEXIST and os.path.isdir(path):
            pass
        # possibly handle other errno cases here, otherwise finally:
        else:
            raise

346voto

Fred Foo Punkte 341230

In Python >=3.2 ist das

os.makedirs(path, exist_ok=True)

In früheren Versionen verwenden Sie @tzot's Antwort .

166voto

Joe Holloway Punkte 26743

Dies ist einfacher als das Abfangen der Ausnahme:

import os
if not os.path.exists(...):
    os.makedirs(...)

Haftungsausschluss Dieser Ansatz erfordert zwei Systemaufrufe, was in bestimmten Umgebungen/Bedingungen anfälliger für Race Conditions ist. Wenn Sie etwas Anspruchsvolleres als ein einfaches Wegwerfskript schreiben, das in einer kontrollierten Umgebung läuft, sollten Sie besser die akzeptierte Lösung wählen, die nur einen Systemaufruf erfordert.

UPDATE 2012-07-27

Ich bin versucht, diese Antwort zu löschen, aber ich denke, dass der unten stehende Kommentarthread von Nutzen ist. Daher wandle ich ihn in ein Wiki um.

48voto

auraham Punkte 1637

Kürzlich fand ich dies distutils.dir_util.mkpath :

In [17]: from distutils.dir_util import mkpath

In [18]: mkpath('./foo/bar')
Out[18]: ['foo', 'foo/bar']

18voto

Ali SAID OMAR Punkte 5456

Mit Pathlib aus der Python3-Standardbibliothek:

Path(mypath).mkdir(parents=True, exist_ok=True)

Wenn parents wahr ist, werden alle fehlenden Eltern dieses Pfades als erstellt; sie werden mit den Standardberechtigungen erstellt, ohne den Modus zu berücksichtigen (in Nachahmung des POSIX-Befehls mkdir -p). Wenn exist_ok false ist (die Vorgabe), wird ein FileExistsError ausgelöst, wenn das Zielverzeichnis bereits existiert.

Wenn exist_ok true ist, werden FileExistsError-Ausnahmen ignoriert (dasselbe (gleiches Verhalten wie der POSIX-Befehl mkdir -p), aber nur, wenn die letzte Pfad Komponente keine existierende Nicht-Verzeichnis-Datei ist.

Geändert in Version 3.5: Der Parameter exist_ok wurde hinzugefügt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X