[英]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.