Möglicherweise möchten Sie das Verzeichnis auch erstellen, wenn es nicht vorhanden ist.
Quelle , wenn es noch auf SO da ist.
================================================== ===================
Verwenden Sie unter Python ≥ 3.5 pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
Für ältere Versionen von Python sehe ich zwei Antworten mit guten Eigenschaften, jede mit einem kleinen Fehler, also werde ich meine Meinung dazu abgeben:
Versuchen Sie es os.path.exists
und überlegen Sie es sich os.makedirs
für die Erstellung.
import os
if not os.path.exists(directory):
os.makedirs(directory)
Wie in Kommentaren und an anderer Stelle erwähnt, gibt es eine Race-Bedingung - wenn das Verzeichnis zwischen dem os.path.exists
und dem os.makedirs
Aufruf erstellt os.makedirs
wird, schlägt das mit einem fehl OSError
. Leider ist das Abfangen OSError
und Fortfahren von Decken nicht kinderleicht, da ein Fehler beim Erstellen des Verzeichnisses aufgrund anderer Faktoren wie unzureichender Berechtigungen, vollständiger Festplatte usw. ignoriert wird.
Eine Möglichkeit wäre OSError
, den eingebetteten Fehlercode abzufangen und zu untersuchen (siehe Gibt es eine plattformübergreifende Möglichkeit, Informationen von Pythons OSError abzurufen ):
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
Alternativ könnte es eine Sekunde geben os.path.exists
, aber nehmen wir an, eine andere hat das Verzeichnis nach der ersten Überprüfung erstellt und es dann vor der zweiten entfernt - wir könnten uns immer noch täuschen lassen.
Abhängig von der Anwendung kann die Gefahr gleichzeitiger Vorgänge mehr oder weniger groß sein als die Gefahr, die durch andere Faktoren wie z. B. Dateiberechtigungen entsteht. Der Entwickler müsste mehr über die jeweilige zu entwickelnde Anwendung und die erwartete Umgebung wissen, bevor er eine Implementierung auswählt.
Moderne Versionen von Python verbessern diesen Code erheblich, indem sie FileExistsError
(in 3.3 +) ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... und indem ein Schlüsselwortargument os.makedirs
aufgerufen wirdexist_ok
(in 3.2+).
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
stattdessen ausführen , um festzustellen, ob das Verzeichnis vorhanden ist und gleichzeitig ein Verzeichnis ist.