Переписать мой текстовый файл с оценками, чтобы убедиться, что он содержит только последние 4 оценки (python)
Ранее, с помощью пользователей SO, я мог найти, как хранить максимум 4 ключа в Документе Python со свойством maxlength внутри словаря.
Теперь я хочу пойти дальше. Ниже текстовый файл со всеминедавний баллы моих участников - Дейв, Джек и Адам.
Jack:10
Dave:20
Adam:30
Jack:40
Adam:50
Dave:60
Jack:70
Dave:80
Jack:90
Jack:100
Dave:110
Dave:120
Adam:130
Adam:140
Adam:150
Теперь вот мой код, который позволяет мне увидеть последние 4 оценки в Python:
import collections
from collections import defaultdict
scores_guessed = collections.defaultdict(lambda: collections.deque(maxlen=4))
with open('Guess Scores.txt') as f:
for line in f:
name,val = line.split(":")
scores_guessed[name].appendleft(int(val))
for k in sorted(scores_guessed):
print("\n"+k," ".join(map(str,scores_guessed[k])))
writer = open('Guess Scores.txt', 'wb')
for key, value in scores_guessed.items():
writer.writerow([key,':',value])
Очевидно, он выведет следующий результат для словаря:
Adam 150 140 130 50
Dave 120 110 80 60
Jack 100 90 70 40
тем не мениеЯ хочу, чтобы файл прочитал мне последние четыре результата в алфавитном порядке:
Adam:150
Adam:140
Adam:130
Adam:50
Dave:120
Dave:110
Dave:80
Dave:60
Jack:100
Jack:90
Jack:70
Jack:40
Я думал, что этот блок кода будет работать:
for key, value in scores_guessed.items():
writer.writerow([key,':',value])
Все же это возвращает мне результат:
AttributeError: '_io.BufferedWriter' object has no attribute 'writerow'
Например, если Адам набрал 200 баллов, я хочу, чтобы Scores_guessed был переписан как:
Adam:200
Adam:150
Adam:140
Adam:130
Что не так?
ОБНОВИТЬ - В ответ на первый ответ ниже я отредактировал последний блок кода следующим образом:
for key, value in scores_guessed.items():
writer.write("{}:{}\n".format(key,value))
Тем не менее он выдает мне следующее сообщение: writer.write ("{}: {} \ n" .format (key, value)) TypeError: 'str' не поддерживает интерфейс буфера
Что происходит?