In den Modi 'a'oder 'a+'wird am Ende der Datei geschrieben, auch wenn sich write()der Zeiger der Datei zum aktuellen Zeitpunkt, zu dem die Funktion ausgelöst wird, nicht am Ende der Datei befindet: Der Zeiger wird vor dem Schreiben an das Ende der Datei verschoben . Sie können auf zwei Arten tun, was Sie wollen.
1. Weg , kann verwendet werden, wenn es keine Probleme gibt, die Datei in den Speicher zu laden:
def line_prepender(filename, line):
with open(filename, 'r+') as f:
content = f.read()
f.seek(0, 0)
f.write(line.rstrip('\r\n') + '\n' + content)
2. Weg :
def line_pre_adder(filename, line_to_prepend):
f = fileinput.input(filename, inplace=1)
for xline in f:
if f.isfirstline():
print line_to_prepend.rstrip('\r\n') + '\n' + xline,
else:
print xline,
Ich weiß nicht, wie diese Methode unter der Haube funktioniert und ob sie für große Dateien verwendet werden kann. Das an die Eingabe übergebene Argument 1 ermöglicht das Umschreiben einer Zeile an Ort und Stelle. Die folgenden Zeilen müssen vorwärts oder rückwärts verschoben werden, damit der Inplace-Vorgang ausgeführt wird, aber ich kenne den Mechanismus nicht