dictionary - 重写我的分数文本文件以确保它只有最后 4个分数( python )

  显示原文与译文双语对照的内容
0 0


以前,用户帮助我们能够找到如何在 python 文档中使用属性在文档中存储最大 4个键。

现在,我想更进一步。 下面是一个文本文件,其中包含我的参与者 Dave,杰克和Adam最近的得分。


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

下面是我的代码,让我可以看到 python 中最后 4个分数:


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'

例如如果adam分数为 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'不支持缓冲区接口

发生了什么?

时间: 原作者:

0 0

使用的writer.writerow 语法对应于模块,它是按照以下方式使用的:


import csv
with open('some_file.csv', 'wb') as csvfile:
 writer = csv.writer(csvfile, delimiter=' ',
 quotechar='|', quoting=csv.QUOTE_MINIMAL)
 writer.writerow(['Spam'] * 5 + ['Baked Beans'])
 writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

在我看来,你使用的是错误的引用,因为你在上面的代码中没有使用 csv 模块。

所以,改变下面的代码


for key, value in scores_guessed.items():
 writer.writerow([key,':',value])

对于这里代码:


for key, value in scores_guessed.items(): 
 output ="%s:%sn" % (key,value)
 writer.write(output)

你将以二进制模式打开文件,而不是使用


writer = open('Guess Scores.txt', 'wt')
for key, value in scores_guessed.items(): 
 output ="{}:{}n".format(key,value)
 writer.write(output)
writer.close()

编辑 2

因为你使用的是双端队列,所以使用:


writer = open('Guess Scores.txt', 'wt')
for key, value in scores_guessed.items(): 
 output ="{}:{}n".format(key,','.join(map(str, scores_guessed[key])))
 writer.write(output)
writer.close()

或者使用:


with open("output.txt","wt") as f:
 for key in scores_guessed:
 f.write("{} {}".format(key, ','.join(map(str, scores_guessed[key])))) 

原作者:
...