我有一个程序来存储人名和他们的分数,在python的txt文件中。
例如这是我当前的代码:
name = input("Name: ")
score = input("Score: ")
file_name = "student_scores.txt"
file = open(file_name , 'a')
file.write(str(name) + ", " + str(score) + "\n")
file.close()
输出txt文件是,(name = bob)和(score = 1):
bob, 1
当我为同一个人(bob)输入另一个分数(2)时,txt文件如下所示:
bob, 1
bob, 2
但是,如何更改我的代码,以便txt文件如下所示:
bob, 1, 2
答案 0 :(得分:0)
不幸的是,对于普通的文本文件,您需要重写文件内容以插入到中间。您可以考虑只处理文件以在最后生成所需的输出,而不是插入到文件的中间。
答案 1 :(得分:0)
您不能追加到某一行,但是,您可以覆盖部分行。如果你在行尾留下一堆空白,这样你就可以录制最多5个分数并更新到位。要执行此操作,请打开文件'rw'进行读写,然后读取,直至读取bob的得分线。然后你可以按照鲍勃线的长度向后搜索并用他的新分数重写它。
尽管如此,除非使用文本格式有特殊原因,否则最好使用sqlite数据库文件。
答案 2 :(得分:0)
将现有文件的数据存储在名称为键的字典中,并将分数列表作为值。此代码将现有数据存储到字典中,为其添加新分数,并使用正确的格式将字典写入文件。
import os
from collections import defaultdict
def scores_to_dict(file_name):
"""Returns a defaultdict of name / list of scores as key / value"""
if not os.path.isfile(file_name):
return defaultdict(list)
with open(file_name, 'r') as f:
content = f.readlines()
content = [line.strip('\n').split(', ') for line in content]
temp_dict = {line[0]: line[1:] for line in content}
d = defaultdict(list)
d.update(temp_dict)
return d
name = input("Name: ")
score = input("Score: ")
d = scores_to_dict('student_scores.txt')
d[name].append(score)
with open('student_scores.txt', 'w') as f:
for k, v in d.items():
f.write(', '.join([k] + v) + '\n')