Python测验没有写入txt文件

时间:2014-12-12 19:37:00

标签: python

我正在尝试编写一个简单的算术测验。一旦用户完成测验,我想将他们的名字和分数写入文本文件。但是,如果他们已经完成了测验,那么他们的新分数应该与之前的分数相同。 目前,文本文件包含:
Raju,Joyal : 10
但是,当以相同的姓氏完成测试时,新的分数不会附加到此行,并且当以不同的姓氏完成测试时,根本不会向文本文件写入新行。 这是我的代码:

rewrite = False
flag = True
while flag == True:
    try:

        # opening src in a+ mode will allow me to read and append to file
        with open("Class {0} data.txt".format(classNo),"a+") as src:

            # list containing all data from file, one line is one item in list
            data = src.readlines()

            for ind,line in enumerate(data):

                if surname.lower() in line.lower():
                    # overwrite the relevant item in data with the updated score
                    data[ind] = "{0} {1}\n".format(line.rstrip(), ", ",score)
                    rewrite = True

                else:
                    src.write("{0},{1} : {2}{3} ".format(surname, firstName, score,"\n"))


        if rewrite == True:

            # reopen src in write mode and overwrite all the records with the items in data
            with open("Class {} data.txt".format(classNo),"w") as src2: 
                src2.writelines(data)

        flag = False

    except IOError:
        errorHandle("Data file not found. Please ensure data files are the in same folder as the program")

2 个答案:

答案 0 :(得分:2)

您正在打开文件但是,因为您处于“追加”模式(a+),您的读/写指针位于文件的 end 。因此,当您说readlines()时,您什么也得不到:即使文件不为空,也没有更多行超过您当前的位置。因此,您的for循环遍历长度为0的列表,因此代码永远不会运行。

您应该阅读有关使用文件的信息(查找关键字seektell)。

请注意,即使您位于文件中间的正确位置,覆盖现有文件中已有的内容也不是一个好方法:如果您要编写的数据是不同的数字你想要覆盖的字节数,你会遇到问题。相反,您可能希望打开该文件的一个副本以进行读取,并创建一个要写入的新副本。当它们完成并关闭时,移动较新的文件以替换较旧的文件。

最后请注意if surname.lower() in line.lower()不是水密逻辑。如果您的文件包含条目Raju,Joyal: 10而其他人的姓氏为“Joy”,会发生什么?

答案 1 :(得分:0)

这是我自己的项目,但我不知道它是否有帮助:

file=open("Mathematics Test Results (v2.5).txt","a")
file.write("Name: "+name+", Score: "+str(score)+", Class: "+cls+"."+"\n")
file.close()