2016-10-20 2 views
-2

간단한 점수 제출 옵션을 만들었습니다. 사용자가 이름과 점수를 입력하면 목록에 저장됩니다. 목록은 상위 10 개 점수 만 저장합니다. 목록보다 .txt 파일이 인쇄됩니다. 그러나 프로그램이 작동하는 동안에 만 작동합니다. 다시 시작할 때 .txt 파일의 기본 점수 만 있습니다. 사용자 점수가 저장되지 않았습니다. 내가 pickle 모듈을 사용하고 있습니다.프로그램 종료시 목록 변경 사항을 유지하는 방법은 무엇입니까?

이것은 내 코드 조각입니다. 파이썬 3.4와 Tkinter입니다. 저는 파이썬을 배우고 있다는 것을 기억하십시오.

# This is inside class 
# ... 
# ... 

    self.printto = tk.Button(self, text="Submit", 
          command=self.highscore 
          ) 
    self.printto.pack(side="left") 

    self.high_scores = [ 
     ('Liz', 1800) 
    ] 

def highscore(self): 
    name = self.name_ent.get() 
    score = int(self.score_ent.get()) 

    self.high_scores.append((name, score)) 
    high_scores = sorted(self.high_scores, key=itemgetter(1), reverse=True)[:10] 

    with open('D:\Desktop/mytext.txt', 'wb') as f: 
     pickle.dump(high_scores, f) 

답변

3

데이터를 파일로만 저장하고 있지만 읽지는 않습니다. 프로그램 시작시 파일을 열고 점수를 읽어야합니다.

with open('D:\Desktop/mytext.txt', 'rb') as f: 
    high_scores = pickle.load(f) 
+0

임의의 코드를 입력하십시오. – pythoner

+2

@pythoner : 이미'pickle' 모듈을 찾았습니다. 그 모듈을 검사하고'pickle.load()'메소드를 보았습니까? –

+0

파일에 추가했는데 오류가 발생했습니다 : – pythoner

-1

몇 가지 우선 : 당신의 문제가 여기에없는 추가 모드에서 파일을 열

with open('D:\Desktop/mytext.txt', 'wb') as f: 

이지만, 창조, 각각의 시간은 당신이 파일에 뭔가를 쓰고 싶어 기존 파일을 덮어 씁니다. 먼저 그것을 읽고 상위 10 점을 얻기 위해 작성하려는 날짜와 비교할 수 있습니다.

두 번째 것은 pickle을 사용하여 목록을 저장하면 strings/ints은 과도한 일종입니다. json.dumps/loads을 대신 사용하십시오.

+0

피클을 추가하고 싶지 않습니다. 이전 목록을 업데이트 된 목록으로 바꾸기 위해'w'를 사용하고 싶습니다. 'pickle'은 여기에서 잘 작동합니다. JSON은 훌륭한 대안이지만 여기서는 반드시 문제가되는 것은 아닙니다. –

-1

을 찾고 계십니까? 텍스트 파일의 점수를 읽으려면

관련 문제