In dem Python eingebauten in offener Funktion, was ist der genaue Unterschied zwischen den Modi w
, a
, w+
, a+
und r+
?
Insbesondere impliziert die Dokumentation, dass all dies das Schreiben in die Datei ermöglicht, und besagt, dass die Dateien speziell zum "Anhängen", "Schreiben" und "Aktualisieren" geöffnet werden, definiert jedoch nicht, was diese Begriffe bedeuten.
Antworten:
Die Öffnungsmodi sind genau die gleichen wie für die C-Standardbibliotheksfunktion
fopen()
.Die BSD-
fopen
Manpage definiert sie wie folgt:quelle
w
undw+
beide könnenThe file is created if it does not exist
b
auf den Modus angehängt öffnet die Datei im Binär - Modus, so gibt es auch Modi wierb
,wb
, undr+b
. Python unter Windows unterscheidet zwischen Text- und Binärdateien. Die Zeilenendezeichen in Textdateien werden beim Lesen oder Schreiben von Daten automatisch geringfügig geändert.+
nicht etwas konsequentes unabhängig macht, wenn es ista
,w
oderr
? Oder sehe ich das Muster nicht? Was ist das Muster?Mir ist aufgefallen, dass ich von Zeit zu Zeit wieder von Google öffnen muss, um mir ein Bild von den Hauptunterschieden zwischen den Modi zu machen. Daher dachte ich, dass ein Diagramm beim nächsten Mal schneller zu lesen ist. Vielleicht findet das auch jemand anderes hilfreich.
quelle
a
Beschreibung ist falsch . Die Schreibvorgänge werden immer am Ende positioniert.Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar
die etwas stärker ist als nur zu sagen, dass die Anfangsposition das Ende ist.Gleiche Infos, nur in Tabellenform
wo Bedeutungen sind: (nur um Fehlinterpretationen zu vermeiden)
Schreiben - Schreiben in eine Datei ist erlaubt
create - Datei wird erstellt, wenn sie noch nicht vorhanden ist
trunctate - beim Öffnen der Datei wird sie leer gemacht (der gesamte Inhalt der Datei wird gelöscht)
Position beim Start - Nach dem Öffnen der Datei wird die Anfangsposition auf den Anfang der Datei gesetzt
Hinweis:
a
unda+
immer an das Ende der Datei anhängen - ignoriert alleseek
Bewegungen.Übrigens. interessantes Verhalten zumindest auf meinem win7 / python2.7 für neue Datei im
a+
Modus geöffnet :write('aa'); seek(0, 0); read(1); write('b')
- Sekundewrite
wird ignoriertwrite('aa'); seek(0, 0); read(2); write('b')
- Sekundewrite
erhöhtIOError
quelle
open(file,'a'); close(); open(file,'r+')
, um dies zu erreichen.a
unda+
Schreibvorgänge immer am Ende der Datei ausgeführt wird, unabhängig davon, ob der Zeiger manuell mit verschoben wirdseek()
.Die Optionen sind dieselben wie für die Funktion fopen in der C-Standardbibliothek:
w
schneidet die Datei ab und überschreibt alles, was bereits vorhanden wara
wird an die Datei angehängt und zu dem hinzugefügt, was bereits vorhanden warw+
Wird zum Lesen und Schreiben geöffnet, wobei die Datei abgeschnitten wird, aber Sie können auch zurücklesen, was in die Datei geschrieben wurdea+
Wird zum Anhängen und Lesen geöffnet, sodass Sie sowohl an die Datei anhängen als auch deren Inhalt lesen könnenquelle
Ich denke, dies ist wichtig für die plattformübergreifende Ausführung, dh als CYA. :) :)
Dies wird direkt aus Python Software Foundation 2.7.x zitiert .
quelle
Ich bin darauf gestoßen, um herauszufinden, warum Sie den Modus 'w +' gegen 'w' verwenden würden. Am Ende habe ich nur ein paar Tests gemacht. Ich sehe nicht viel Sinn für den Modus 'w +', da in beiden Fällen die Datei zunächst abgeschnitten wird. Mit dem 'w +' können Sie jedoch nach dem Schreiben lesen, indem Sie zurück suchen. Wenn Sie versuchen, mit 'w' zu lesen, wird ein IOError ausgelöst. Das Lesen ohne Verwendung der Suche mit dem Modus 'w +' bringt nichts, da der Dateizeiger hinter dem Punkt steht, an dem Sie geschrieben haben.
quelle