Was ist der eleganteste Weg, um eine Datei so zu öffnen, dass
Soweit ich das beurteilen kann, scheint das open
builtin nicht auf Zur Aufgabe: Es stellt verschiedene Modi zur Verfügung, aber jeder, den ich ausprobiert habe, erfüllt zumindest eine meiner Anforderungen nicht:
r+
schlägt fehl, wenn die Datei nicht existiert. w+
schneidet die Datei ab und verliert dabei vorhandenen Inhalt. a+
erzwingt, dass alle Schreibvorgänge bis zum Ende der Datei gehen, zumindest auf meinem OS X. Es ist ein schlechtes Gefühl, vor dem Öffnen der Datei zu suchen, da es Platz für die Rennbedingungen lässt. Dasselbe gilt für das Wiederholen des Öffnens mit einem anderen Modus innerhalb eines Ausnahmebehandlers. Ich hoffe, es gibt einen besseren Weg.
Sie müssen os.open()
verwenden, um es auf einer niedrigeren Ebene in zu öffnen das Betriebssystem als open()
erlaubt. Insbesondere sollte os.RDWR | os.O_CREAT
als flags
übergeben werden, was Sie wollen. Details finden Sie auf der Manpage open(2)
. Sie können die zurückgegebene FD dann an os.fdopen()
übergeben, um ein Dateiobjekt daraus zu erhalten .
Ich könnte mich irren, aber ich nehme nicht an, dass es eine Race Condition geben wird, wenn es nicht mehrere Threads gibt und die try
und except
Blöcke der gleiche Thread sind? (Ist es tatsächlich möglich, mehrere Threads zu tun?)
Dies sollte der Aufgabe entsprechen.
%Vor%Ich hatte ein ähnliches Problem, als ich versuchte, Elemente in einer Datei als Wörterbuch abzulegen. Allerdings importierte ich Json, Ссылка das hier, vielleicht sehr hilfreich. Denken Sie daran, Json zu importieren. Dies wird die Grundlage für das Dump und das Laden von Daten bei Bedarf sein. In diesem Fall lade ich Informationen in ein leeres Wörterbuch ein und lade sie dort. Die Methode try and exc ist sehr nützlich, wenn Sie ein leeres Wörterbuch verwenden möchten. Ich finde "r +" am nützlichsten, da es die Datei liest und schreibt.
%Vor%Tags und Links python file-io python-3.x io posix