Python写入文本文件字典显示不正确的信息

时间:2015-02-14 20:39:05

标签: python dictionary text-files


我正在测试我的代码,看它是否正常运行,因此删除任何不一致。

首先,代码如下:

user_name = str(input("What is your name?"))
last_name = str(input("What is your surname?"))
final_total = int(input("What is your total score?"))

with open('quiz_results.txt') as f:
    for line in f:
        name,val = line.split(":")
        user_scores[name].appendleft(int(val))

    with open("quiz_results.txt", "a+") as f:
        f.write('{}:{}\n'.format(user_name + last_name, final_total))
        print("complete.")

    with open('quiz_results.txt') as f:
        for line in f:
            name,val = line.split(":")
            user_scores[name].appendleft(int(val))

现在,对于测试数据,我为user_name添加了'Dave',为last_name添加了'Johnson',每个go的最终总数为70,80,90和100,所以我重复了4次程序。

当我输入第一个结果70时,我得到了我期望在文本文件中的结果:

DaveJohnson:70

不同寻常的是,在文本文件中,当我输入80表示结果(同名)时,我会进入文本文件:

DaveJohnson:80
DaveJohnson:70
DaveJohnson:70

当我应该得到:

DaveJohnson:80
DaveJohnson:70

当我输入90时,我进入文本文件:

DaveJohnson:90
DaveJohnson:70
DaveJohnson:70

当我应该得到:

DaveJohnson:90
DaveJohnson:80
DaveJohnson:70

当我输入100时,我进入文本文件:

DaveJohnson:100
DaveJohnson:70
DaveJohnson:70

但我应该得到:

DaveJohnson:100
DaveJohnson:90
DaveJohnson:80

地球上出了什么问题? 更新全部解决了。

2 个答案:

答案 0 :(得分:1)

在重新读取数据之前,您永远不会清除user_scores字典(在第3 with语句中)

在阅读之前尝试清除字典:

user_scores.clear() 
with open('quiz_results.txt') as f:
    for line in f:
        name,val = line.split(":")
        user_scores[name].appendleft(int(val))

另外:最后with语句看起来不正确;我想你只想写下所有的名字,得分如下:

with open('quiz_results.txt', 'wt') as f :
    for k, v in sorted(user_scores.items()):
        f.write(item[0] + ':' + str(item[1])+'\n')

答案 1 :(得分:1)

您在不重置user_names的内容的情况下两次阅读quizresults.txt。因此,如果用户名/分数对在开始时位于文件中,则将分数读入用户名,然后再次读取。 user_scores的内容类似于

开始:{'DaveJohnson':[]} #I'm guesing

第一次运行后的第一个阻止后的

{'DaveJohnson':[]}

首次运行后的第二个阻止:{'DaveJohnson':[0]}

首次运行后的第三个阻止:{'DaveJohnson':[70]}

首次运行后的最后一次阻止:{'DaveJohnson':[70]}

在第二次运行后的第一个阻止后:{'DaveJohnson':[70]}

第二次运行后的第二次阻止:{'DaveJohnson':[70]} (在这里你将DaveJohnson:80添加到你的文件

第二次跑完第三次后[在这里你重新阅读DaveJohnson:文件中的70并阅读DaveJohnson:80]:`{' DaveJohnson':[70,70,80] 出于好奇,为什么你有一个脚本正在读取文件,附加到它,再读一遍然后覆盖它?