problem z zapisem danych pickle, shelve python

0

Witam, od długiego czasu próbuje napisać pogram który doda zapisze punktacje w pliku binarnym, chce aby program dopisywał przy każdym uruchomieniu punktacje i aby była możliwość sprawdzenia wyników.

Niestety udało mi się tylko stworzyć program który zapisuje i odczytuje z pliku, ale problem jest że nie dopisuje a zmienia.(usuwa stare i zapisuje nowe)

program jest w fazie początkowej ale tu nie chodzi o program tylko o tą funkcje
Sam już nie wiem czy zmienna która chce zapisywać powinna się zmieniać czy zapis pliku szwankuje,
Proszę o pomoc

import pickle, shelve
scores = []
def dane_gracza():
    name = input("wprowadź swój Nick")
    global name
    return name

def instrukcjia():
    print("""
                Witaj """, name, """

                        w

           xxxx

                           POWODZENIA!!!""")
    input("Jeśli jestes gotowy wcisnij enter")

def pięć_lini():
    text_file = open("pytania.txt", "r")
    global linia
    linia = text_file.readline()
    
    for i in range(5):
        linia = text_file.readline()
        print(linia)
    x = input("Podaj odpowiedz ")
    global score
    score = 0
    score = int(score)
    if x == "b": #       1
        score += 1 
    
   #tu jest dalsza część powtarzającego sie kodu ale usunałem aby skrócić
    
    
def gratulacje():
    print("Gratuluje", name, "zdobyłeś", score, "/20 punktów")

def dodawanie():

   entry = (score, name)
   scores.append(entry)

def zapisywanie():

    s = shelve.open("pikle2.dat", "c")               #TUTAJ MAM PROBLEM
    s[""] = (scores)
    s.sync()                          
  
def main():
    dane_gracza()
    instrukcjia()
    pięć_lini()
    gratulacje()
    dodawanie()
    zapisywanie()




choice = None
while choice != "0":
 print(
 """
 
 0 - zakończ
 1 - zagraj
 2 - sprawdź wyniki
     
 """
 )
 choice = input("Wybierasz: ")
 print()
 
 if choice == "0":
  print("Do widzenia.")
 
 

 elif choice == "1":
     main()
  
 elif choice == "2":
 
  print("GRACZ\tWYNIK")
 
  s = shelve.open("pikle2.dat", "r")              #TUTAJ MAM PROBLEM
  print("", s[""])
 
 else:
  print("Niestety,", choice, "nie jest prawidłowym wyborem.")

input("\n\nAby zakończyć program, naciśnij klawisz Enter.")

Dziękuje.
2

Jak chodzi o dopisywanie danych do pliku, to pickle używa sie tak:

import pickle

d = {0: "hell", 1: "heaven", 2: "earth"}

pickle_data = open("file","wb")
pickle.dump(d, pickle_data)
pickle_data.close()



pickle_new = open("file","rb")
d = pickle.load(pickle_new)
d[3] = "purgatory"

print(d)

operujesz na obiekcie wyciągniętym z pliku, po czym Zapisujesz.

0
lion137 napisał(a):

Jak chodzi o dopisywanie danych do pliku, to pickle używa sie tak:

import pickle

d = {0: "hell", 1: "heaven", 2: "earth"}

pickle_data = open("file","wb")
pickle.dump(d, pickle_data)
pickle_data.close()



pickle_new = open("file","rb")
d = pickle.load(pickle_new)
d[3] = "purgatory"

print(d)

operujesz na obiekcie wyciągniętym z pliku, po czym Zapisujesz.

Dziękuje bardzo Lion!
W końcu udało mi się napisać wszystko tak jak w planie było. Ja chyba za dużo kombinowałem bo wczoraj nawet z Twoja odpowiedzią nie umiałem tego zrobić/zrozumieć i miałem pisać o wyjaśnienie. A dziś na zasadzie kopiuj wklej i działa :)
Dzięki jeszcze raz i polecam się na przyszłość :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1