2017-08-04 4 views
1

Ich habe versucht, in eine Datei zu schreiben, die den binären Modus mit dem Beizmodul verwendet. Dies ist ein Beispiel:An eine Beizdatei anhängen, ohne zu löschen

import pickle 
    file = open("file.txt","wb") 
    dict = {"a":"b","c":"d"} 
    pickle.dump(dict, file) 
    file.close() 

Diese Methode löscht jedoch die anderen zuvor geschriebenen Dicts. Wie kann ich schreiben, ohne die anderen Dinge in der Datei zu löschen?

+0

In Verbindung stehend: https://stackoverflow.com/questions/4706499/how-do-you-append-to-a-file. Beachten Sie, ob das mit einer Pickle-Datei funktioniert. – Evert

Antwort

0

Sie müssen an die Originaldatei anhängen, aber zuerst den Inhalt entpacken (ich nehme an, die Originaldatei hatte gebeizten Inhalt). Was Sie taten einfach wird die vorhandene Datei mit einem neuen gebeizt Objekt überschreiben

import pickle 

#create the initial file for test purposes only 
obj = {"a":"b","c":"d"} 
with open("file.txt","wb") as f: 
    pickle.dump(obj, f) 

#reopen and unpickle the pickled content and read to obj 
with open("file.txt","rb") as f: 
    obj = pickle.load(f) 
    print(obj) 

#add to the dictionary object 
obj["newa"]="newb" 
obj["newc"]="newd" 

with open("file.txt","wb") as f: 
    pickle.dump(obj, f) 

#reopen and unpickle the pickled content and read to obj 
with open("file.txt","rb") as f: 
    obj = pickle.load(f) 
    print(obj) 
+0

Danke, ich werde versuchen, dies auf meinen Code anwenden – taynan

0

Sie gebeizte Objekte in einer Datei verketten können, so dass es nicht notwendig ist, um die Datei in und schreibt, es zu lesen. Sie müssen lediglich an die Datei anhängen, anstatt sie zu überschreiben.

ersetzen:

file = open("file.txt","wb") 

mit:

file = open("file.txt","ab") 

Weitere Informationen über die Datei-Modi zur Verfügung und was sie tun, finden Sie in der documentation.

Und denken Sie daran, dass Sie mehrere pickle.load() s benötigen, um die Daten zu entkoppeln.

+0

Ja, ich habe versucht, verwenden Sie "ab" und a + b, ich weiß nicht warum, aber das funktioniert nicht:/ – taynan

+0

@taynan Was genau funktioniert nicht? – glibdud

+0

aber Sie sagen, dass Sie nicht brauchen "rb" auf Gurke? – taynan

Verwandte Themen