将上次结果保存到文本文件中

2024-04-20 07:00:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是,我有一个测试,用户可以选择从3类。然后他们继续完成测验,目前他们的名字和分数被保存到正确班级的文本文件中(3个不同班级有3个不同的文件)。但是,如果同一个用户完成了测验,只有学生获得的最后2个分数保存在文件中,而不是所有的分数,我该怎么做呢。你知道吗

if classChoice ==1:
        File=open("A.txt","a+")
        File.write(names+","+str(score)+"\n")
        File.close()

if classChoice ==2:
        File=open("B.txt","a+")
        File.write(names+","+str(score)+"\n")
        File.close()
if classChoice ==3:
        File=open("C.txt","a+")
        File.write(names+","+str(score)+"\n")
        File.close()

Tags: 文件用户txtcloseifnamesopen名字
1条回答
网友
1楼 · 发布于 2024-04-20 07:00:22

很明显,您希望将数据保存在自己定义的特定数据结构中。在你的例子中,你只想保存某个学生的最后两个分数。你知道吗

让我们观察一下文件“A.txt”的外观:

约翰,90岁

山姆,80岁

爱丽丝,100

萨姆,90岁

约翰,100

你不必每次都附加文本,你必须先阅读整个文件,然后把它转换成你可以使用的东西,比如字典。你知道吗

def convert_file_to_dict(path):
  d = {}  
  lines = open(path).splitlines()
  for line in lines:
    name, grade = line.split(',')
    if name in d:
      d[name].append(grade)
    else:
      d[name] = [grade]
  return grade

在我们的例子中,如果我调用convert_file_to_dict('A.txt'),我将收到由{ 'John':['90','100'], 'Sam':['80','90'], 'Alice':['100'] }组成的字典。请注意,等级列表中的顺序是按“A.txt”中的行顺序保留的。你知道吗

现在使用该词典,您可以控制只保留最后2个等级:

def insert_new_grade(grades_dict, name, grade):
  if name in grades_dict:
    if len(grades_dict[name]) == 1:
      grades_dict[name].append(str(grade))
    else:
      grades_dict[name] = grades_dict[name][1:] + [str(grade)]
  else:
    grades_dict[name] = [str(grade)]

现在你只需要写一个函数把这个dict转换成一个文件。。。 *您可能想使用像collections.defaultdict这样的有用对象,但我不想在这里过度使用。。。你知道吗

相关问题 更多 >