将最后的结果保存在文本文件中

时间:2016-04-02 16:01:12

标签: 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()

1 个答案:

答案 0 :(得分:0)

显然,您希望将数据保存在由您定义的特定数据结构中。在您的情况下,您只想保存特定学生的最后两个分数。

让我们观察你的文件" 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"中的行顺序保留。

现在有了这本词典,你可以控制只保留最后两个等级:

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等有用的对象,但我不想在这里过度使用......