it-swarm.com.de

os.mkdir (path) gibt OSError zurück, wenn das Verzeichnis nicht vorhanden ist

Ich rufe os.mkdir an, um einen Ordner mit einem bestimmten Satz generierter Daten zu erstellen. Obwohl der von mir angegebene Pfad nicht erstellt wurde, löst os.mkdir (path) einen OSError aus, der den Pfad bereits enthält.

Zum Beispiel rufe ich an:

os.mkdir(test)

Dieser Aufruf führt zu OSError: [Errno 17] File exists: 'test', obwohl ich nirgendwo ein Testverzeichnis oder eine Datei namens test habe.

ANMERKUNG: Der tatsächliche Pfadname, den ich verwende, ist nicht "test", sondern etwas obskurer, dass ich sicher bin, dass er nirgendwo genannt wird.

Hilfe bitte?

19
Quanquan Liu

Gregs Antwort ist richtig, geht aber nicht weit genug. OSError hat Unterfehlerbedingungen und Sie möchten sie nicht jedes Mal unterdrücken. Es ist ratsam, nur erwartete OS-Fehler abzufangen.

Führen Sie zusätzliche Überprüfungen durch, bevor Sie sich entscheiden, die Ausnahme zu unterdrücken:

import errno
import os

try:
    os.mkdir(dirname)
except OSError as exc:
    if exc.errno != errno.EEXIST:
        raise
    pass

Wahrscheinlich möchten Sie errno.EACCES (Erlaubnis verweigert), errno.ENOSPC (Kein Speicherplatz auf dem Gerät), errno.EROFS (Schreibgeschütztes Dateisystem) usw. unterdrücken eine bewusste Entscheidung basierend auf der spezifischen Logik dessen, was Sie bauen.

Gregs Code unterdrückt alle Betriebssystemfehler. das ist unsicher, genauso wie except Exception unsicher ist.

33
Chris Johnson

In Python 3.2 und höher können Sie Folgendes verwenden:

os.makedirs(path, exist_ok=True)

um eine Ausnahme zu vermeiden, wenn das Verzeichnis bereits existiert. Dies wird immer noch eine Ausnahme auslösen, wenn path existiert und kein Verzeichnis ist.

26
1''

Überprüfen Sie einfach, ob der Pfad vorhanden ist. wenn nicht, schaffe es

if not os.path.exists(test):
        os.makedirs(test)
21
lordkain

Das gleiche Problem hatte ich auch, besonders wenn der String 'test' den mehrfachen Verzeichnisnamen enthält. __ Wenn also 'test' das einzige Verzeichnis enthält -

if not os.path.exists(test):
try:
    os.makedir(test)
except:
    raise OSError("Can't create destination directory (%s)!" % (test))  

Wenn der 'Test' mehrere Verzeichnisse wie '\ dir1\dir2' enthält, dann -

if not os.path.exists(test):
try:
    os.makedirs(test)
except:
    raise OSError("Can't create destination directory (%s)!" % (test))  
3
Anupam Bera

Sie haben dort eine Datei mit dem Namen test. Sie können kein Verzeichnis mit demselben Namen erstellen. 

1
CT Zhu

Ist mir unter Windows passiert, vielleicht ist dies der Fall:

Wie du, habe ich versucht:

os.mkdir(dirname)

und bekam OSError: [Errno 17] File exists: '<dirname>'. Als ich lief:

os.path.exists(dirname)

Ich wurde falsch und es hat mich für eine Weile verrückt gemacht :)

Das Problem war: In einem bestimmten Fenster befand ich mich in einem bestimmten Verzeichnis. Obwohl es zu dieser Zeit nicht existierte (ich habe es aus Linux entfernt). Die Lösung bestand darin, dieses Fenster zu schließen\zu einem anderen Ort zu navigieren ...

1
Omer Dagan

Ich kenne die Besonderheiten Ihres Dateisystems nicht. Aber wenn Sie dies wirklich umgehen wollen, verwenden Sie vielleicht eine try/except-Klausel?

try:
    os.mkdir(test)
except OSError:
    print "test already exists"

Sie können in der Zwischenzeit immer eine Art Debugging durchführen. 

1
Greg

Möglicherweise befindet sich im Verzeichnis ein versteckter Ordnername. Überprüfen Sie manuell, ob er existiert.

ls -a

Nur erstellen, wenn es nicht existiert

if not os.path.exists(test):
    os.makedirs(test)
0
Tabraiz Ali

Für python 2.7

from distutils.dir_util import mkpath
mkpath(path)
0
Ahsan aslam