2016-04-10 35 views
-2

私はクイズをコーディングしています。クイズを完了した後、スコアを保存すると、最後の3つのスコアがクイズに保存されます名前。以前にクイズを完了していない場合は、テキストファイル内に新しい行が書き込まれます。TypeError '_io.TextIOWrapper'オブジェクトはアイテム割り当てをサポートしていません

filename = (str(class_number) + 'txt') 
with open(filename, 'a') as f: 
    f.write(str(name) + " : " + str(score) + '\n') 
with open(filename) as f: 
    lines = [line for line in f if line.strip()] 
    lines.sort() 

with open(filename) as f: 
    f.seek(0) 
    scores = f.readline() 
    from collections import deque 
    for line in scores: 
     score= int(score) 
     if name not in f: 
      f[name] = deque(maxlen=3) 
     temp_q = filename[name] 
     temp_q.append(str(score)) 
     filename[name] = temp_q 

    filehandle = open (filename, 'w') 
    for key,values in filename.iteritems(): 
     filehandle.write(name + ',') 
     filehandle.write (','.join(list(values)) + '\n') 
    filehandle.close() 

そして、これは誤りです:

f[name] = deque(maxlen=3) 

TypeError '_io.TextIOWrapper' object does not support item assignment 

答えて

1

あなたがここで開かれているファイルオブジェクトfにアイテムを割り当てるしようとしている。

f[name] = deque(maxlen=3) 

それはあなたがしようとしているものを私に明確ではありませんここで達成するが、ファイルオブジェクトはマッピング(辞書)ではない。

あなたはには、最初の辞書にファイルの内容を解析変更を行い、結果を書き戻す必要があるだろう:

scores = {} 
with open(filename) as f: 
    for line in f: 
     line = line.strip() 
     if not line: 
      continue 
     name, _, score = line.partition(':') 
     scores.setdefault(name.strip(), []).append(int(score)) 

これは名前からリストへの辞書マッピングを作成しますスコアの;ファイルには名前ごとに複数のスコアが含まれる可能性があるためです。

+0

助けていただきありがとうございます。私はコードを実行すると思いますが、達成しようとしているのは最後の3つのスコアが生徒の名前に保存されているためですテキストファイルでは最後のスコアに追加するだけですが、ファイルに4がある場合は最初のスコアを破棄し、最新の3つを保存します。 – user6173661

+0

@ user6173661:私はこの作業のGSCE要件に精通しています。しかし、あなた自身でこれを理解する必要があります。私はこの特定の問題を手伝ってくれました。それは完全なタスクソリューションへの道のりです。 –

関連する問題