利用python往文件中写入学生成绩时信息重复

这个程序整体上没什么问题,但是在连续输入数据时会发生第二次输入的数据会带着第一次的数据再次出现一遍,也就是说第一个数据出现了两次;如果是退出这个系统重新进入然后输入信息的话就不会出现这种问题。希望可以解决一下。

class Student:
    students=[]
    def __init__(self,num='',name='',sex='',class1=''):
        self.num=num
        self.name=name
        self.sex=sex
        self.class1=class1
    def __str__(self):
        msg="学生信息:num=%s,name=%s,sex=%s,class1=%s"%(self.num,self.name,self.sex,self.class1)
        return msg     
    def read_students_from_file(self):
        with open('1.txt','r',encoding='utf-8') as fo1:
            for s in fo1:
                stu=s.split(',')
                self.students.append(Student(stu[0],stu[1],stu[2],stu[3]))
    def write_students_to_file(self):
        with open('1.txt','a',encoding='utf-8') as fo1:
            for stu in self.students:
                fo1.write('%s.%s,%s,%s'%(stu.num,stu.name,stu.sex,stu.class1))
                fo1.write('\n')
    def check_stuno(self,num):
        no_exists=False
        for stu in self.students:
            if num==stu.num:
                no_exists=True
                break
        return no_exists
    def add_students(self):
        num=input("请输入要添加的学员学号:")
        while self.check_stuno(num):
            num=input("学生已存在,请重新输入:")
        num=input("请输入学生学号:")
        name=input("请输入学生姓名:")
        sex=input("请输入学生性别:")
        class1=input("请输入学生专业班级:")
        stu=Student(num,name,sex,class1)
        self.students.append(stu)
        self.write_students_to_file()
    def remove_students(self):
        num=input("请输入要删除的学生学号:")
        for stu in self.students:
            if stu.num==num:
                self.students.remove(stu)
                print("学生{}已被删除".format(num))
                self.write_students_to_file()
                break
            else:
                print('学生不存在')
    def update_student(self):
        num=input("请输入要修改的学生学号:")
        for stu in self.students:
            if num==stu.num:
                stu.num=input("请输入学生学号:")
                stu.name=input("请输入学生姓名:")
                stu.sex=input("请输入学生性别:")
                stu.class1=input("请输入学生所在专业班级:")
                self.students[self.students.index(stu)]=stu
                self.write_students_to_file()
                print('修改成功')
            else:
                print("学生不存在")
    def select_students(self):
        num=input("请输入要查询的学生学号:")
        for stu in self.students:
            if num==stu.num:
                print("查询到的学生信息:",stu)
                break
        else:print("学生不存在")
    def print_student_info(self):
        with open('1.txt','r',encoding='utf-8') as fo1:
            s = fo1.read()
            print(s)
stu=Student()
while True:
    step=input(
        """========================
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.显示所有学生信息
6.退出系统
========================
请选择操作:""")
    step=int(step)
    if step==1:
        stu.add_students()
        stu.print_student_info()
    elif step==2:
        stu.remove_students()
        stu.print_student_info()
    elif step==3:
        stu.update_student()
        stu.print_student_info()
    elif step==4:
        stu.select_students()
    elif step==5:
        stu.print_student_info()
    elif step==6:
        print('退出系统')
        break
    else:
        print('指令有误,请重新输入:')
             
   

运行结果如下:

========================
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.显示所有学生信息
6.退出系统
========================
请选择操作:1
请输入要添加的学员学号:10004
请输入学生学号:10004
请输入学生姓名:12
请输入学生性别:12
请输入学生专业班级:1111
10001,张强,男,自动化2101
10002,李琳,女,临床2202
10001.张强,男,自动化2101

10002.李琳,女,临床2202

10003.12,13,1111
10004.12,12,1111

========================
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.显示所有学生信息
6.退出系统
========================
请选择操作:1
请输入要添加的学员学号:10005
请输入学生学号:10005
请输入学生姓名:12
请输入学生性别:13
请输入学生专业班级:1666
10001,张强,男,自动化2101
10002,李琳,女,临床2202
10001.张强,男,自动化2101

10002.李琳,女,临床2202

10003.12,13,1111
10004.12,12,1111
10004.12,12,1111
10005.12,13,1666

10004的这个数据出现了两次,但是退出系统重新进入后就不会有这个问题。

错误在于你每次保存一个新增的学生信息就循环把所有的学生信息都保存了 一遍,导致数据重复,就是这里:

img


解决方法就是把循环去掉,且只写入当前新增的学生数据:

    def write_students_to_file(self):
        with open('1.txt', 'a', encoding='utf-8') as fo1:
            fo1.write('%s.%s,%s,%s' % (self.num, self.name, self.sex, self.class1))
            fo1.write('\n')

然后调用时:

        stu = Student(num, name, sex, class1)
        stu.write_students_to_file()

按你这个写法,会出现问题是因为write_students_to_file写入文件时,会追加students列表中的所有数据,所以会造成数据重复。最简单的解决办法是把写入文件的模式改为“w”像这样。
with open('1.txt', 'w', encoding='utf-8') as fo1: