2017-11-26 7 views
1

Ich bitte den Benutzer, ein Element zur Liste hinzuzufügen, dann speichere ich die geänderte Liste. Aber wenn ich das Programm erneut ausführe, sind die zuvor hinzugefügten Elemente verschwunden. Ich verstehe nicht, warum die neuen Elemente nur vorübergehend gespeichert werden und meine Liste sich selbst zurücksetzt. Kann jemand erklären und beraten, wie ich neue Gegenstände speichern kann?Problem mit dem Speichern einer geänderten Liste mit Gurke

import pickle 

my_list = ["a", "b", "c", "d", "e"] 

def add(item): 
    my_list.append(item) 
    with open("my_list.pickle", 'wb') as file: 
     pickle.dump(my_list, file) 
     return my_list 


while True: 
    item = input("Add to the list: \n").upper() 
    if item == "Q": 
     break 
    else: 
     item = add(item) 

with open("my_list.pickle", "rb") as file1: 
    my_items = pickle.load(file1) 

print(my_items) 
+0

Wenn Sie "anhängen" möchten, sollten Sie nicht pickle verwenden, da Sie mit "Pickle" und "unpickle" umgehen müssen https://StackOverflow.com/questions/12761991/how-to-use-append- with-pickle-in-python – user1767754

+0

Sie laden die Liste * nachdem * Sie den Benutzer zur Eingabe aufgefordert. –

Antwort

1

Sie lesen die Liste aus der Datei , nachdem Sie sie mit Daten gefüllt. Also, wenn wir die Haupt (Ich entfernte die add Funktion und kommentierte das Programm) zu analysieren, erhalten wir:

# the standard value of the list 
my_list = ["a", "b", "c", "d", "e"] 

# adding data to the list 
while True: 
    # we write the new list to the file 
    item = input("Add to the list: \n").upper() 
    if item == "Q": 
     break 
    else: 
     item = add(item) 

# loading the list we overrided in this program session 
with open("my_list.pickle", "rb") as file1: 
    my_items = pickle.load(file1) 

# print the loaded list 
print(my_items) 

So, da Sie mit einer Standardliste zu starten, und jedes Mal, wenn Sie Elemente hinzufügen, die Sie in die Datei neu schreiben die Datei, wenn Sie am Ende des Programms die Liste laden, raten Sie was? Sie erhalten die Liste, die Sie gerade gespeichert haben.

Die Lösung ist somit die Belastung an die Spitze des Programms zu bewegen:

import pickle 
import os.path 
# the standard value of the list 
my_list = ["a", "b", "c", "d", "e"] 

# in case the file already exists, we use that list 
if os.path.isfile("my_list.pickle"): with open("my_list.pickle", "rb") as file1: my_items = pickle.load(file1) 

# adding data to the list 
while True: 
    # we write the new list to the file 
    item = input("Add to the list: \n").upper() 
    if item == "Q": 
     break 
    else: 
     item = add(item) 

# print the final list 
print(my_items)

Beachten Sie, dass die neue Liste zu jeder Zeit speichern eher ineffizient ist. Sie geben dem Benutzer die Möglichkeit, die Liste zu ändern und am Ende des Programms zu speichern.

+0

Vielen Dank! Ist 'os' immer notwendig? – Ank12

+0

@ Ank12: Nein, aber es ist ein Standardansatz, um zu prüfen, ob eine Datei existiert. –

Verwandte Themen