将数据导入文本文件

时间:2015-11-30 09:21:20

标签: python

我的课程是数学测验。用户完成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)

2 个答案:

答案 0 :(得分:0)

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或'set`等。

我已将文件中的数据结构更改为如下,以便轻松创建字典。 (:将名称与分数分开)

  

查理:2,5

     

翁:0

     

贾罗德:

     杰克冰:4

我试图消除KeyError失败,以防这是第一次尝试

答案 1 :(得分:0)

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

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。要了解如何将列表转换为字符串,请查看this page。如果您还有其他问题,请与我们联系。