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.

1116voto

muksie Punkte 11621

Sie sollten Folgendes verwenden open mit dem w+ Modus:

file = open('myfile.dat', 'w+')

204voto

Qwerty Punkte 24128

Der Vorteil des folgenden Ansatzes ist, dass die Datei ordnungsgemäß geschlossen am Ende des Blocks, auch wenn dabei eine Ausnahme ausgelöst wird. Das ist gleichbedeutend mit try-finally , aber viel kürzer.

with open("file.dat","a+") as f:
    f.write(...)
    ...

a+ Öffnet eine Datei sowohl zum Anhängen als auch zum Lesen. Der Dateizeiger ist am Ende der Datei, wenn die Datei existiert. Die Datei wird im Modus Anhängen-Modus. Wenn die Datei nicht vorhanden ist, wird eine neue Datei zum Lesen und Schreiben. - Python-Dateimodi

seek()-Methode setzt die aktuelle Position der Datei.

f.seek(pos [, (0|1|2)])
pos .. position of the r/w pointer
[] .. optionally
() .. one of ->
  0 .. absolute position
  1 .. relative position to current
  2 .. relative position from end

Nur "rwab+"-Zeichen sind erlaubt; es muss genau ein "rwa"-Zeichen geben - siehe Stack Overflow-Frage Python-Dateimodi im Detail .

66voto

Gajendra D Ambi Punkte 3270
'''
w  write mode
r  read mode
a  append mode

w+  create file if it doesn't exist and open it in write mode
r+  open for reading and writing. Does not create file.
a+  create file if it doesn't exist and open it in append mode
'''

Beispiel:

file_name = 'my_file.txt'
f = open(file_name, 'w+')  # open file in write mode
f.write('python rules')
f.close()

(FYI bin mit Python Version 3.6.2)

43voto

lollercoaster Punkte 14461

Eine gute Praxis ist die Verwendung der folgenden Methoden:

import os

writepath = 'some/path/to/file.txt'

mode = 'a' if os.path.exists(writepath) else 'w'
with open(writepath, mode) as f:
    f.write('Hello, world!\n')

38voto

Granitosaurus Punkte 18849

Seit Python 3.4 können Sie devrait verwenden. pathlib Dateien zu "berühren".
Das ist eine viel elegantere Lösung als die in diesem Thread vorgeschlagenen Lösungen.

from pathlib import Path

filename = Path('myfile.txt')
filename.touch(exist_ok=True)  # will create file, if it exists will do nothing
file = open(filename)

Dasselbe gilt für Verzeichnisse:

filename.mkdir(parents=True, exist_ok=True)

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