Ich habe einige Daten erstellt und mehrmals so gespeichert:
with open('filename', 'a') as f:
pickle.dump(data, f)
Jedes Mal, wenn die Größe der Datei zunimmt, aber wenn ich die Datei öffne
with open('filename', 'rb') as f:
x = pickle.load(f)
Ich kann nur Daten vom letzten Mal sehen. Wie kann ich eine Datei richtig lesen?
open('filename', 'wb')
Antworten:
Pickle serialisiert jeweils ein einzelnes Objekt und liest ein einzelnes Objekt zurück. Die eingelegten Daten werden nacheinander in der Datei aufgezeichnet.
Wenn Sie dies einfach tun
pickle.load
, sollten Sie das erste in die Datei serialisierte Objekt lesen (nicht das letzte, wie Sie es geschrieben haben).Nach der Unserialisierung des ersten Objekts befindet sich der Dateizeiger am Anfang des nächsten Objekts. Wenn Sie einfach
pickle.load
erneut aufrufen , wird das nächste Objekt gelesen. Führen Sie dies bis zum Ende der Datei aus.objects = [] with (open("myfile", "rb")) as openfile: while True: try: objects.append(pickle.load(openfile)) except EOFError: break
quelle
Es gibt eine read_pickle- Funktion als Teil von pandas 0.22+
import pandas as pd object = pd.read_pickle(r'filepath')
quelle
Das Folgende ist ein Beispiel dafür, wie Sie eine Pickle-Datei schreiben und lesen können. Beachten Sie, dass Sie, wenn Sie weiterhin Pickle-Daten an die Datei anhängen, so lange aus der Datei lesen müssen, bis Sie das gewünschte Element gefunden haben oder eine Ausnahme generiert wird, indem Sie das Ende der Datei erreichen. Das macht die letzte Funktion.
import os import pickle PICKLE_FILE = 'pickle.dat' def main(): # append data to the pickle file add_to_pickle(PICKLE_FILE, 123) add_to_pickle(PICKLE_FILE, 'Hello') add_to_pickle(PICKLE_FILE, None) add_to_pickle(PICKLE_FILE, b'World') add_to_pickle(PICKLE_FILE, 456.789) # load & show all stored objects for item in read_from_pickle(PICKLE_FILE): print(repr(item)) os.remove(PICKLE_FILE) def add_to_pickle(path, item): with open(path, 'ab') as file: pickle.dump(item, file, pickle.HIGHEST_PROTOCOL) def read_from_pickle(path): with open(path, 'rb') as file: try: while True: yield pickle.load(file) except EOFError: pass if __name__ == '__main__': main()
quelle
Ich habe ein Software-Tool entwickelt, das (die meisten) Pickle-Dateien direkt in Ihrem Browser öffnet (nichts wird übertragen, so dass es zu 100% privat ist):
https://pickleviewer.com/
quelle
Sie machen nichts damit, Sie laden nur die Datei.
for line in x: print x
druckt jede Zeile. (Im zweiten mit der Aussage)
quelle