我正在尝试保存用户名出现的次数,一旦计数达到3,它就会覆盖文件上的分数而不是添加它。
例如;
Jarrod:0
Jarrod:1
Jarrod:2
Jarrod:0
Jarrod:1
Jarrod:0
Jarrod:0
Jarrod:0
Jarrod:0
Jarrod:0
Jarrod:0
Jarrod:0
Jarrod:0
Jarrod:0
相反,它会显示
Jarrod:0
Jarrod:0
Jarrod:0
最后三个分数。
if classs == "1":
textfile = open("Class1.txt", "a")
textfile.write(name.title()+ ':' + str(score) + "\n")
textfile.close()
with open("Class1.txt") as f:
entrylist = []
for line in f:
column = line.split(":")
namefile = column[0]
scores = int(column[1].strip())
entrylist.append(namefile)
namecount = []
for word in entrylist:
if word not in namecount:
namecount += [word]
word_count = []
for word in namecount:
word_count += [float(entrylist.count(word))]
for i in range(len(namecount)):
print(namecount[i] + ":" + str(word_count[i]))
我已设法将用户名添加到namecount
,然后将其添加到word_count
,其中显示的次数已保留
如何隔离特定名称的数字计数,然后覆盖该用户的最新分数?
答案 0 :(得分:1)
您可以使用collections.deque
对象。 constructor可让您限制列表的总大小。
我没有完全遵循您的代码的工作方式,但如果一个文件中有多个用户,我认为dict
或collections.defaultdict
也是更好的选择。我不确定这是否是您的代码的要求。
更像这样:(未经测试)
import collections
def new3ElementDeque():
return collections.deque([], 3)
userTop3 = collections.defaultdict(new3ElementDeque)
with open("Class1.txt") as f:
for line in f:
user, score = line.split(':')
userTop3[user].append(score)
这样每个用户都有自己的deque
,只能存储最多三个元素。然后,您可以将它们分别写入单独的文件。