Gibt es eine Möglichkeit, eine Datei zum Lesen und Schreiben zu öffnen?
Um dieses Problem zu umgehen, öffne ich die Datei zum Schreiben, schließe sie und öffne sie dann erneut zum Lesen. Aber gibt es eine Möglichkeit , eine Datei zu öffnen sowohl das Lesen und Schreiben?
mmap
mmap
ist eine großartige Idee, aber was ist, wenn Sie mit Parallelität umgehen müssen? Gibt es eine Möglichkeit, den Zugang zu reservieren?Antworten:
So lesen Sie eine Datei und schreiben sie dann (überschreiben vorhandener Daten), ohne sie zu schließen und erneut zu öffnen:
quelle
a+
diesea
"auf einigen Unix-Systemen bedeutet, dass alle Schreibvorgänge unabhängig von der aktuellen Suchposition an das Ende der Datei angehängt werden ". In diesem Fallf.seek(0)
funktioniert das nicht wie erwartet. Ich bin unter Linux einfach schlecht drauf geworden.seek
undtruncate
wird hier verwendet. Die meisten Leser kommen von Google und kopieren und fügen ein.seek(0)
tut: Es platziert den fp an der Position0
( dh am Anfang).truncate()
Schneiden Sie die Datei auf die angegebene Anzahl von Bytes ab, dh entfernen Sie den gesamten Dateiinhalt nach der angegebenen Anzahl von Bytes. Stellen Sie sich vor, Ihre Datei enthält die ZeichenfolgeHello, world
und Sie schreibenBye
. Wenn Sie dies nicht tun, wirdtruncate()
der Inhalt am Ende angezeigtByelo, world
, da Sie den in der Datei vorhandenen Text nie gelöscht haben.truncate()
schneidet die Datei auf den aktuellen fp ab.r+
ist der kanonische Modus zum gleichzeitigen Lesen und Schreiben. Dies unterscheidet sich nicht von der Verwendung desfopen()
Systemaufrufs, dafile()
/open()
nur ein winziger Wrapper um diesen Betriebssystemaufruf ist.quelle
Fassen Sie das E / A-Verhalten zusammen
und der Entscheidungszweig
quelle
Ich habe so etwas ausprobiert und es funktioniert wie erwartet:
Wo:
Und:
Wenn Sie das Python-Tutorial zum Lesen und Schreiben von Dateien öffnen , werden Sie Folgendes feststellen:
quelle
truncate
Methode, um dies zu stoppen.