如何保存最后三个条目

时间:2015-04-16 16:55:13

标签: python file

我正在尝试保存用户名出现的次数,一旦计数达到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,其中显示的次数已保留

如何隔离特定名称的数字计数,然后覆盖该用户的最新分数?

1 个答案:

答案 0 :(得分:1)

您可以使用collections.deque对象。 constructor可让您限制列表的总大小。

我没有完全遵循您的代码的工作方式,但如果一个文件中有多个用户,我认为dictcollections.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,只能存储最多三个元素。然后,您可以将它们分别写入单独的文件。