webentwicklung-frage-antwort-db.com.de

Der Versuch, open (Dateiname, 'w') zu verwenden, führt zu IOError: [Errno 2] Keine solche Datei oder kein solches Verzeichnis, wenn das Verzeichnis nicht existiert

Ich versuche, mit Python eine Textdatei zu erstellen und in diese zu schreiben. Ich habe nach einer Lösung/einem Grund für diesen Fehler gesucht und kann sie nicht finden.

Hier ist der Code, der nicht funktioniert:

afile = 'D:\\temp\\test.txt'
outFile = open(afile, 'w' )
outFile.write('Test.')
outFile.close()

# Error: 2
# Traceback (most recent call last):
#   File "<maya console>", line 1, in <module>
# IOError: [Errno 2] No such file or directory: 'D:\\temp\\test.txt' #

Die meisten Antworten, die ich fand, bezogen sich auf die Schrägstriche im Pfad, also ...

I tried 'D:/temp/test.txt' and got an error.
I tried r'D:\temp\test.txt' and got an error.

Wenn ich versuche, eine Datei im Stammverzeichnis von D:/zu erstellen, habe ich Erfolg.

'D:/test.txt' works.
'D:\\test.txt' works.
r'D:\test.txt' works.

Es scheint, dass ich den gewünschten Verzeichnispfad beim Erstellen der Datei nicht erstellen kann. Was ist die richtige Methode zum Erstellen von Dateien unter einem bestimmten Pfad mit Python unter Windows (7)? Verstehe ich falsch, was open () tun kann? Werden Verzeichnisse erstellt, wenn sie nicht vorhanden sind oder nicht? Muss ich den Verzeichnispfad explizit erstellen, bevor ich im Schreibmodus open () zum Erstellen einer Datei verwende?

21
gonzalimator

Sie vermuten zu Recht, dass das übergeordnete Verzeichnis für die Datei vorhanden sein muss, damit open erfolgreich ist. Der einfache Weg, um damit umzugehen, besteht darin, os.makedirs anzurufen.

Aus der Dokumentation :

os.makedirs (Pfad [ Modus])

Rekursive Verzeichniserstellungsfunktion. Wie mkdir(), erstellt jedoch alle Zwischenverzeichnisse, die für die Aufnahme des Blattverzeichnisses erforderlich sind.

Ihr Code könnte also ungefähr so ​​aussehen:

filename = ...
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
    os.makedirs(dirname)
with open(filename, 'w'):
    ...
39
David Heffernan

Wenn Sie versuchen, eine Datei in einem nicht vorhandenen Verzeichnis zu erstellen, wird dieser Fehler angezeigt.

Sie müssen zuerst sicherstellen, dass das Verzeichnis vorhanden ist. Sie können dies mit os.makedirs() gemäß diese Antwort tun.

2
paxdiablo

Alternativ können Sie überprüfen, ob die Datei vorhanden ist, bevor Sie sie öffnen:

os.path.exists (afile)

Welches entweder wahr oder falsch sagt, abhängig davon, ob es existiert.

1
aMoon