Wie kann man in Python an eine Datei anhängen?

Wie kann man an die Datei anhängen, anstatt sie zu überschreiben? Gibt es eine spezielle Funktion, die an die Datei anhängt?

Lösung
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
Kommentare (16)

Sie müssen die Datei im Anfügemodus öffnen, indem Sie "a" oder "ab" als Modus einstellen. Siehe open().

Wenn Sie im Modus "a" öffnen, befindet sich die Schreibposition immer am Ende der Datei (ein Append). Sie können mit "a+" öffnen, um das Lesen zu ermöglichen, rückwärts zu suchen und zu lesen (aber alle Schreibvorgänge finden immer noch am Ende der Datei statt!).

Beispiel:

>>> with open('test1','wb') as f:
        f.write('test')
>>> with open('test1','ab') as f:
        f.write('koko')
>>> with open('test1','rb') as f:
        f.read()
'testkoko'

Anmerkung: Die Verwendung von 'a' ist nicht dasselbe wie das Öffnen mit 'w' und das Suchen bis zum Ende der Datei - bedenken Sie, was passieren könnte, wenn ein anderes Programm die Datei öffnet und zwischen dem Suchen und Schreiben mit dem Schreiben beginnt. Auf einigen Betriebssystemen garantiert das Öffnen der Datei mit 'a', dass alle folgenden Schreibvorgänge atomar an das Ende der Datei angehängt werden (auch wenn die Datei durch andere Schreibvorgänge wächst).


Ein paar weitere Details über die Funktionsweise des "a" Modus (nur unter Linux getestet). Auch wenn Sie zurück suchen, wird jeder Schreibvorgang an das Ende der Datei angehängt:

>>> f = open('test','a+') # Not using 'with' just to simplify the example REPL session
>>> f.write('hi')
>>> f.seek(0)
>>> f.read()
'hi'
>>> f.seek(0)
>>> f.write('bye') # Will still append despite the seek(0)!
>>> f.seek(0)
>>> f.read()
'hibye'

In der Tat sagt die fopen manpage:

Das Öffnen einer Datei im Append-Modus (a als erstes Zeichen des Modus) bewirkt, dass alle nachfolgenden Schreiboperationen in diesen Stream am Ende der Datei, als ob dem Aufruf vorausgegangen wäre:

fseek(stream, 0, SEEK_END);


Alte vereinfachte Antwort (ohne with):

Beispiel: (in einem echten Programm verwendet man mit, um die Datei zu schließen - siehe die Dokumentation)

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
Kommentare (3)

Ich mache das immer,

f = open('filename.txt', 'a')
f.write("stuff")
f.close()

It's einfach, aber sehr nützlich.

Kommentare (8)

Wahrscheinlich wollen Sie "a" als Argument für den Modus übergeben. Siehe die Dokumentation zu open().

with open("foo", "a") as f:
    f.write("cool beans...")

Es gibt andere Permutationen des Modus-Arguments für den Aktualisierungs- (+), den Abschneide- (w) und den Binärmodus (b), aber mit "a" zu beginnen ist die beste Wahl.

Kommentare (2)

Python hat viele Variationen von den drei Hauptmodi, diese drei Modi sind:

'w'   write text
'r'   read text
'a'   append text

An eine Datei anzuhängen ist also so einfach wie's:

f = open('filename.txt', 'a') 
f.write('whatever you want to write here (in append mode) here.')

Dann gibt es die Modi, die Ihren Code einfach weniger Zeilen machen:

'r+'  read + write text
'w+'  read + write text
'a+'  append + read text

Schließlich gibt es die Modi des Lesens/Schreibens im Binärformat:

'rb'  read binary
'wb'  write binary
'ab'  append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
Kommentare (0)

Wenn wir diese Zeile open(filename, "a") verwenden, bedeutet das a, dass die Datei angehängt wird, d.h. wir können zusätzliche Daten in die bestehende Datei einfügen.

Sie können einfach die folgenden Zeilen verwenden, um den Text in Ihrer Datei anzuhängen

def FileSave(filename,content):
    with open(filename, "a") as myfile:
        myfile.write(content)

FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")
Kommentare (0)

Sie können die Datei auch im r+ Modus öffnen und dann die Dateiposition auf das Ende der Datei setzen.

import os

with open('text.txt', 'r+') as f:
    f.seek(0, os.SEEK_END)
    f.write("text to add")

Das Öffnen der Datei im r+ Modus erlaubt es Ihnen, in andere Dateipositionen außer dem Ende zu schreiben, während a und a+ das Schreiben bis zum Ende erzwingen.

Kommentare (0)

wenn Sie an eine Datei anhängen möchten

with open("test.txt", "a") as myfile:
    myfile.write("append me")

Wir haben die Variable myfile deklariert, um eine Datei namens test.txt zu öffnen. Open benötigt 2 Argumente, die Datei, die wir öffnen wollen, und eine Zeichenkette, die die Arten von Berechtigungen oder Operationen repräsentiert, die wir mit der Datei durchführen wollen

hier sind die Optionen für den Dateimodus

ModusBeschreibung

'r' Dies ist der Standardmodus. Öffnet die Datei zum Lesen. 'w' Dieser Modus Öffnet die Datei zum Schreiben. Wenn die Datei nicht existiert, wird eine neue Datei erstellt. Wenn die Datei existiert, wird die Datei abgeschnitten. 'x' Erstellt eine neue Datei. Wenn die Datei bereits vorhanden ist, schlägt der Vorgang fehl. 'a' Datei im Append-Modus öffnen. Wenn die Datei nicht vorhanden ist, wird eine neue Datei erstellt. 't' Dies ist der Standardmodus. Sie wird im Textmodus geöffnet. 'b' Dieser Modus wird im Binärmodus geöffnet. '+' Damit wird eine Datei zum Lesen und Schreiben (Aktualisierung) geöffnet.

Kommentare (0)

Der Parameter 'a' bezeichnet den Append-Modus. Wenn Sie 't jedes Malmit offenem` verwenden wollen, können Sie einfach eine Funktion schreiben, die das für Sie erledigt:

def append(txt='\nFunktion erfolgreich ausgeführt', Datei):
mit open(file, 'a') als f:
f.schreiben(txt)

Wenn Sie anderswo als am Ende schreiben möchten, können Sie 'r+'† verwenden:

Import-OS

mit open(Datei, 'r+') als f:
f.seek(0, os.SEEK_END)
f.write("hinzuzufügender Text")

Schließlich gewährt der Parameter 'w+' noch mehr Freiheit. Insbesondere erlaubt er Ihnen, die Datei zu erstellen, wenn sie nicht't existiert, sowie den Inhalt einer Datei zu leeren, die gerade existiert.


† Die Anerkennung für diese Funktion geht an @Primusa][1]

[1]: https://stackoverflow.com/a/54584404/7583953

Kommentare (0)

Hier's mein Skript, das im Grunde die Anzahl der Zeilen zählt, dann anhängt und dann wieder zählt, damit Sie den Beweis haben, dass es funktioniert hat.

shortPath  = "../file_to_be_appended"
short = open(shortPath, 'r')

## this counts how many line are originally in the file:
long_path = "../file_to_be_appended_to" 
long = open(long_path, 'r')
for i,l in enumerate(long): 
    pass
print "%s has %i lines initially" %(long_path,i)
long.close()

long = open(long_path, 'a') ## now open long file to append
l = True ## will be a line
c = 0 ## count the number of lines you write
while l: 
    try: 
        l = short.next() ## when you run out of lines, this breaks and the except statement is run
        c += 1
        long.write(l)

    except: 
        l = None
        long.close()
        print "Done!, wrote %s lines" %c 

## finally, count how many lines are left. 
long = open(long_path, 'r')
for i,l in enumerate(long): 
    pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()
Kommentare (0)