5668 Stimmen

Wie kann ich ein verschachteltes Verzeichnis sicher erstellen?

Wie kann man am elegantesten prüfen, ob das Verzeichnis, in das eine Datei geschrieben werden soll, existiert, und wenn nicht, das Verzeichnis mit Python erstellen? Das habe ich versucht:

import os

file_path = "/my/directory/filename.txt"
directory = os.path.dirname(file_path)

try:
    os.stat(directory)
except:
    os.mkdir(directory)

f = file(filename)

Irgendwie habe ich die os.path.exists (Danke Kanja, Blair und Douglas). Dies ist, was ich jetzt habe:

def ensure_dir(file_path):
    directory = os.path.dirname(file_path)
    if not os.path.exists(directory):
        os.makedirs(directory)

Gibt es ein Kennzeichen für open() die dafür sorgt, dass dies automatisch geschieht?

42 Stimmen

Im Allgemeinen müssen Sie den Fall berücksichtigen, dass im Dateinamen kein Verzeichnis enthalten ist. Auf meinem Rechner ergibt dirname('foo.txt') '', das nicht existiert und makedirs() zum Scheitern bringt.

9 Stimmen

Wenn der Pfad existiert, muss man nicht nur prüfen, ob es sich um ein Verzeichnis und nicht um eine normale Datei oder ein anderes Objekt handelt (viele Antworten prüfen dies), sondern auch, ob es beschreibbar ist (ich habe keine Antwort gefunden, die dies geprüft hat)

14 Stimmen

Falls Sie hierher gekommen sind, um übergeordnete Verzeichnisse einer Dateipfadzeichenkette zu erstellen p Hier ist mein Codeschnipsel: os.makedirs(p[:p.rindex(os.path.sep)], exist_ok=True)

6voto

Ralph Schwerdt Punkte 109

Wenn Sie das Folgende bedenken:

os.path.isdir('/tmp/dirname')

bedeutet, dass ein Verzeichnis (Pfad) existiert UND ein Verzeichnis ist. Für mich ist diese Methode also genau das, was ich brauche. So kann ich sicherstellen, dass es Ordner (nicht eine Datei) und vorhanden ist.

6voto

iPhynx Punkte 459

Sie können verwenden os.listdir für diese:

import os
if 'dirName' in os.listdir('parentFolderPath')
    print('Directory Exists')

3voto

korakot Punkte 31224

Das beantwortet die Frage vielleicht nicht ganz. Aber ich vermute, Ihre eigentliche Absicht ist es, eine Datei und ihre übergeordneten Verzeichnisse zu erstellen, da sein Inhalt alle in 1 Befehl.

Das können Sie tun mit fastcore Erweiterung zu pathlib: path.mk_write(data)

from fastcore.utils import Path
Path('/dir/to/file.txt').mk_write('Hello World')

Mehr sehen in fastcore-Dokumentation

2voto

Evil Exists Punkte 89
import os
if os.path.isfile(filename):
    print "file exists"
else:
    "Your code here"

Wo Ihr Code hier ist, verwenden Sie den Befehl (touch)

Damit wird geprüft, ob die Datei vorhanden ist, und wenn nicht, wird sie erstellt.

-7voto

Sergiy Maksymenko Punkte 161

Unter Linux können Sie verschachtelte Verzeichnisse erstellen

 dir1/dir2/... 

in einer Zeile:

import os
os.system("mkdir -p {0}".format('dir1/dir2/dir3'))

1 Stimmen

Der OP fragt nach einem Pythonic Weg, um verschachtelte Verzeichnisse zu erstellen (d.h. mit der os-Bibliothek), nicht wie man einen Systemaufruf schreibt.

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