954 Stimmen

open() in Python erstellt keine Datei, wenn sie nicht existiert

Wie öffne ich eine Datei am besten als Lese-/Schreibdatei, wenn sie existiert, oder, wenn sie nicht existiert, erstelle ich sie und öffne sie als Lese-/Schreibdatei? Nach dem, was ich gelesen habe, file = open('myfile.dat', 'rw') sollte dies tun, richtig?

Es funktioniert nicht für mich (Python 2.6.2) und ich frage mich, ob es ein Versionsproblem ist, oder nicht so funktionieren soll oder was.

Im Endeffekt brauche ich einfach eine Lösung für das Problem. Ich bin neugierig auf die anderen Dinge, aber alles, was ich brauche, ist eine schöne Möglichkeit, den Eröffnungsteil zu tun.

Das umschließende Verzeichnis war für den Benutzer und die Gruppe schreibbar, nicht für andere (ich bin auf einem Linux-System... also Rechte 775 in anderen Worten), und der genaue Fehler war:

IOError: keine solche Datei oder Verzeichnis.

2 Stimmen

Wie S. Mark bereits erwähnte, sollte dies "einfach funktionieren". Ist das umschließende Verzeichnis beschreibbar?

8 Stimmen

Muksie's Antwort unten gearbeitet (und baloo's auch für diese Angelegenheit), aber nur der Vollständigkeit halber, die umschließende Dir war schreibbar von Benutzer und Gruppe, nicht andere (im auf einem Linux-System... so Berechtigungen 775 in anderen Worten), und der genaue Fehler war IOError: keine solche Datei oder Verzeichnis. danke für die Hilfe Jungs.

4 Stimmen

Stellen Sie sicher, dass alle führenden Mappen de la file existiert.

34voto

baloo Punkte 7469

Ändern Sie "rw" in "w+".

Oder verwenden Sie 'a+' zum Anhängen (nicht zum Löschen vorhandener Inhalte)

28voto

Khorkrak Punkte 3779
>>> import os
>>> if os.path.exists("myfile.dat"):
...     f = file("myfile.dat", "r+")
... else:
...     f = file("myfile.dat", "w")

r+ bedeutet Lesen/Schreiben

18voto

Chenglong Ma Punkte 133

Für Python 3+, werde ich tun:

import os

os.makedirs('path/to/the/directory', exist_ok=True)

with open('path/to/the/directory/filename', 'w') as f:
    f.write(...)

Das Problem ist also with open kann keine Datei erstellen, bevor das Zielverzeichnis existiert. Wir müssen sie erst erstellen und dann w Modus ist in diesem Fall ausreichend.

13voto

Verwendung:

import os

f_loc = r"C:\Users\Russell\Desktop\myfile.dat"

# Create the file if it does not exist
if not os.path.exists(f_loc):
    open(f_loc, 'w').close()

# Open the file for appending and reading
with open(f_loc, 'a+') as f:
    #Do stuff

Hinweis: Dateien müssen nach dem Öffnen geschlossen werden, und die mit context manager ist eine gute Möglichkeit, Python diese Aufgabe zu überlassen.

11voto

Chien-Wei Huang Punkte 1705

Meine Antwort:

file_path = 'myfile.dat'
try:
    fp = open(file_path)
except IOError:
    # If not exists, create the file
    fp = open(file_path, 'w+')

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