2016-10-20 1 views
-2

私は単純なサブミットスコアオプションを作っています。ユーザーは名前とスコアを入力し、リストに保存します。リストは上位10点のみを保存します。リストよりも.txtファイルに出力されます。しかし、それはプログラムが動作している間だけ動作します。もう一度やり直すと、.txtファイルにはデフォルトのスコアしかありません。ユーザーのスコアは保存されませんでした。私はそれのためのピクルスモジュールを使用しています。プログラム終了時にリストを変更する方法は?

これは私のコードです。 Python 3.4とTkinterです。 私はPythonを学んでいることに留意してください。

# 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の得点を得ることができます。

第2のもの: pickleを使用してstrings/intsでリストを保存すると、過度の過労です。代わりにjson.dumps/loadsを使用してください。

+0

ピクルスを付けたくありません。古いリストを更新リストに置き換えるために 'w'を使いたいとします。 'pickle'はここでうまくいきますが、JSONは素晴らしい代替手段ですが、ここでは必ずしも問題ではありません。 –

-1

このようなサービスをお探しですか?テキストファイルのスコアを読む

user_score = {} 
with open('D:\Desktop/mytext.txt') as f: 
    for line in f: 
     #add user and score to user_score here 
関連する問題