In Python 3.2+ können Sie unter Verwendung der vom OP angeforderten APIs Elegant tun Sie Folgendes:
import os
filename = "/foo/bar/baz.txt"
os.makedirs(os.path.dirname(filename), exist_ok=True)
with open(filename, "w") as f:
f.write("FOOBAR")
Mit dem Pathlib-Modul (eingeführt in Python 3.4) gibt es eine alternative Syntax (danke David258):
from pathlib import Path
output_file = Path("/foo/bar/baz.txt")
output_file.parent.mkdir(exist_ok=True, parents=True)
output_file.write_text("FOOBAR")
In älterem Python gibt es einen weniger eleganten Weg:
Die os.makedirs
Funktion tut dies. Versuchen Sie das Folgende:
import os
import errno
filename = "/foo/bar/baz.txt"
if not os.path.exists(os.path.dirname(filename)):
try:
os.makedirs(os.path.dirname(filename))
except OSError as exc: # Guard against race condition
if exc.errno != errno.EEXIST:
raise
with open(filename, "w") as f:
f.write("FOOBAR")
Der Grund für das Hinzufügen der try-except
Block ist für den Fall gedacht, dass das Verzeichnis zwischen dem os.path.exists
und die os.makedirs
Aufrufe, um uns vor Race Conditions zu schützen.