Ich kann dies mit einer separaten Datei tun, aber wie füge ich eine Zeile an den Anfang einer Datei an?
f=open('log.txt','a')
f.seek(0) #get to the first position
f.write("text")
f.close()
Dies beginnt am Ende der Datei zu schreiben, da die Datei im Anhänge-Modus geöffnet wird.
Antworten:
In den Modi
'a'
oder'a+'
wird am Ende der Datei geschrieben, auch wenn sichwrite()
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
quelle
with open(filename,'r+') as f:
wird die Datei schließen?with
Anweisung ermöglicht es Ihnen , gemeinsamen vermeidentry
/except
/finally
Standardcode. Es wurde in der Python-Version hinzugefügt2.5
.In allen mir vertrauten Dateisystemen können Sie dies nicht direkt tun. Sie müssen eine Zusatzdatei verwenden (die Sie dann umbenennen können, um den Namen der Originaldatei zu übernehmen).
quelle
Um die Antwort von NPE mit Code zu versehen, ist meiner Meinung nach der effizienteste Weg, dies zu tun:
def insert(originalfile,string): with open(originalfile,'r') as f: with open('newfile.txt','w') as f2: f2.write(string) f2.write(f.read()) os.rename('newfile.txt',originalfile)
quelle
Andere Idee:
(1) Sie speichern die Originaldatei als Variable.
(2) Sie überschreiben die Originaldatei mit neuen Informationen.
(3) Sie hängen die Originaldatei an die Daten unter den neuen Informationen an.
Code:
with open(<filename>,'r') as contents: save = contents.read() with open(<filename>,'w') as contents: contents.write(< New Information >) with open(<filename>,'a') as contents: contents.write(save)
quelle
Es gibt keine Möglichkeit, dies mit integrierten Funktionen zu tun, da dies furchtbar ineffizient wäre. Sie müssen den vorhandenen Inhalt der Datei jedes Mal nach unten verschieben, wenn Sie vorne eine Zeile hinzufügen.
Es gibt ein Unix / Linux-Dienstprogramm,
tail
das am Ende einer Datei lesen kann. Vielleicht finden Sie das in Ihrer Anwendung nützlich.quelle
num = [1, 2, 3] #List containing Integers with open("ex3.txt", 'r+') as file: readcontent = file.read() # store the read value of exe.txt into # readcontent file.seek(0, 0) #Takes the cursor to top line for i in num: # writing content of list One by One. file.write(str(i) + "\n") #convert int to str since write() deals # with str file.write(readcontent) #after content of string are written, I return #back content that were in the file
quelle
Der klare Weg, dies zu tun, ist wie folgt, wenn es Ihnen nichts ausmacht, die Datei erneut zu schreiben
with open("a.txt", 'r+') as fp: lines = fp.readlines() # lines is list of line, each element '...\n' lines.insert(0, one_line) # you can use any index if you know the line index fp.seek(0) # file pointer locates at the beginning to write the whole file again fp.writelines(lines) # write whole lists again to the same file
Beachten Sie, dass dies kein direkter Ersatz ist. Es wird wieder eine Datei geschrieben.
Zusammenfassend können Sie eine Datei lesen und in einer Liste speichern, die Liste ändern und die Liste erneut in eine neue Datei mit demselben Dateinamen schreiben.
quelle
with open("fruits.txt", "r+") as file: file.write("bab111y") file.seek(0) content = file.read() print(content)
quelle
Wenn die Datei zu groß ist, um als Liste verwendet zu werden, und Sie sie einfach umkehren möchten, können Sie die Datei zunächst in umgekehrter Reihenfolge schreiben und dann jeweils eine Zeile ab dem Ende der Datei lesen (und in eine andere Datei schreiben) ) mit File-Read-Backwards-Modul
quelle