繁体   English   中英

将数据导入文本文件

[英]Importing data to a text file

我的程序是一个数学测验。 用户完成10个问题,然后得到一个分数。 然后,该分数需要附加到文本文件中。

if classs == "1":
    text_file = open("Class1.txt", "r")
    data = text_file.read()
    text_file.close()
    if name in data:
        searchName(name, score)
    else:
        text_file = open("newFileName.txt","a")
        text_file.write(str(name) +","+ str(score)+ "\n")
        text_file.close()

    questions = 0
    score = 0
    break

此代码块将用户得分和名称附加到文本文件。

但是,我需要这样做,如果用户已经参加了测验,则分数会附加到该名称上,而不是创建一个新值。 分数应附加到一个名称中,直到三个分数为止,然后再次进行测验,它将删除第一个分数并附加最新的分数。

def searchName(name, score):
    with open("Class1.txt", 'r') as f:
        data = f.read().split('\n')
        print(data)
        with open("newFileName.txt", 'w') as newFile:
            for line in data:
                if name in line:        
                    line+=(',') + str(score) + (',')
                newFile.write(line + '\n')

但是,它只会保存1分,一旦再次参加测验,就将其删除。

Dion,0
Jarrod,1
Jake Bing,6
Charlie,2,5

还原为

Dion,0
Jarrod,1
Jake Bing,6,5
Charlie,2,

如果其他用户使用测验(Jake Bing)

def main():

data_file = open("C:\Users\sama0714\Test\\test.txt");

data = dict()
new_score = ("Jake Bing", 4)

for line in data_file.readlines():
    record = line.split(':')
    data[record[0]] = list(record[1].split(','))

try:
    data[new_score[0]].append(new_score[1])
except KeyError:
    data[new_score[0]] = list(str(new_score[1]))

data_file.close()

data_file =  open("C:\Users\sama0714\Test\\test.txt","w");
for name, scores in data.items():
    data_file.write(name + ":" + ",".join(str(i) for i in scores))

data_file.close()

如评论中所述,读取整个文件并更改数据并将其写回。

我在这里使用字典来访问特定播放器的信息以快速访问数据,使用可以使用任何数据处理程序list或“设置”等。

为了方便创建字典,我将文件中的数据结构更改如下。 :将姓名与分数分开)

查理:2,5

迪翁:0

贾罗德:

杰克·宾:4

我试图消除KeyError故障,以防万一这是第一次尝试

解决此问题的最简单方法可能是为每个类创建一个字典(尽管如果类中有重复的名称,这很容易出现问题)。 对于每个名称(字典键),您可以创建一个列表并将分数添加到列表中。 完成输入处理后,您可以立即写下所有分数。 这将比重复读取和写入文件更为有效。 它可能看起来像这样(在if classs...语句之后创建student_dict ):

def search_name(name, score, student_dict):

    if name not in student_dict.keys():
        student_dict[name]=[]
    student_dict[name].append(score)

    return student_dict #{"student_name":[score_1,score2], ... }

完成分数的处理后,您可以一步将名称和分数列表直接写到文件中。 理想情况下,我将完全取消search_name ,只需一步将所有名称和分数直接导入字典,然后再将字典写入文件。 有关如何编写字典的更多信息,请查看this 要了解如何将列表转换为字符串,请查看此页面 如果您还有其他问题,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM