2017-07-14 1 views
1

Ich speichere Informationen in einer Datei mit der pickle.dump-Funktion in Python 3.4. Ich versuche die Daten im LIFO-Formular (last in first out) zu lesen.Lesen einer Datei mit mehreren gebeizten Elementen vom Ende

Alternative, ich denke vielleicht gibt es einen Weg, ich könnte nur den letzten Punkt lesen, vorausgesetzt, es gibt eine Möglichkeit, direkt darauf zu zeigen. Dann zeigen Sie erneut darauf und entfernen Sie es aus der Datei, bevor Sie das nächste Element lesen.

Vielen Dank im Voraus!

+1

Sie etwas geschrieben haben, die wir verbessern könnten versuchen? Versuchen Sie außerdem, das Lesen der gesamten Datei in den Speicher zu vermeiden ("nur den letzten Eintrag lesen")? – pistache

+0

Tut mir leid, aber ich habe noch nichts geschrieben, weil ich nicht herausfinden kann, ob ich den letzten Punkt erreichen kann, ohne die ganze Datei durchzugehen. –

+0

Sie müssten einen Index der Dateiposition pflegen, in der jeder Pickle gestartet wurde, vielleicht in einer zweiten Datei. – jasonharper

Antwort

0

Sie können die Indizes der Elemente halten und sie in einer neuen Reihenfolge gelesen:

import pickle 
data = ["this", "is", "your", "data"] 
indices = [] # keep the index 
with open("file_name.p", "wb") as f: 
    for value in data: 
     indices.append(f.tell()) 
     pickle.dump(value, f) 

# you may want to store `indices` to files 
# and read it in again 
new_data = [] 
with open("file_name.p", "rb") as f: 
    for ap in indices[::-1]: 
     f.seek(ap) 
     new_data.append(pickle.load(f)) 
print(new_data) 
+0

Danke für den Code. Es scheint zu funktionieren. Ich habe nur ein Problem, weil ich das nach dem Stromausfall machen muss. Das Speichern der Indizes in einer Datei würde bedeuten, nach jedem pickle.dump zu laden, anhängen und speichern. –

+0

Ja. Es ist nur eine Liste, also können Sie sie auch in einer Beizdatei speichern und sie aktualisieren, wenn Sie pickle.dump machen. – Huang

+0

Ok vielen Dank für die Hilfe! –

Verwandte Themen