Python 从csv文件中的词典读取
我正在尝试创建一段代码,如果它询问您的姓名和分数,然后将您最近的分数保存到csv文件中。我已经设法让它检查你是否在字典中,并将你的3个最新分数存储在csv文件中。但是,我不知道如何获取代码来打开保存它的文件,这意味着每次保存字典后,它都会有最新的存储,并删除所有其他内容 这就是我得到的:Python 从csv文件中的词典读取,python,csv,python-3.x,dictionary,Python,Csv,Python 3.x,Dictionary,我正在尝试创建一段代码,如果它询问您的姓名和分数,然后将您最近的分数保存到csv文件中。我已经设法让它检查你是否在字典中,并将你的3个最新分数存储在csv文件中。但是,我不知道如何获取代码来打开保存它的文件,这意味着每次保存字典后,它都会有最新的存储,并删除所有其他内容 这就是我得到的: import csv nam=input("Name") sco=int(input("Score")) if nam in class1: namsco=class1[nam] del
import csv
nam=input("Name")
sco=int(input("Score"))
if nam in class1:
namsco=class1[nam]
del class1[nam]
del namsco[0]
namsco.append(sco)
class1[nam]=namsco
print("Score added")
else:
print ("Creating profile")
class1[nam]=[0,0,sco]
print("Score added")
with open('temp.csv', 'w') as f:
w = csv.DictWriter(f, class1.keys())
w.writeheader()
w.writerow(class1)
我省略了class1={},因为导入字典时需要添加class1={}。您正在查找文件的附加'a'参数,而不是'w'
如果这不能回答问题,我将删除它。我不理解否决票。以下内容尝试使用csv文件中的数据初始化class1字典。如果此操作失败,因为这是第一次,并且文件不存在,则会将其设置为空字典 接下来,它通过添加一个新条目或更新一个现有条目来更新该词典,然后在最后使用更新后的词典中的值重写整个文件 请注意,当使用csv.DictReader和csv.DictWriter时,每一行也是一个字典。在这种情况下,使用csv.reader和csv.writer可能会更容易,因为每一行只是一个值序列
import csv
name = input('Name: ')
score = int(input('Score: '))
try:
with open('class1.csv', 'r', newline='') as inf:
class1 = {row['name']: [row['score0'], row['score1'], row['score2']]
for row in csv.DictReader(inf)}
except FileNotFoundError:
class1 = {}
print('Updating' if name in class1 else 'Creating', name+"'s", 'profile')
del class1.setdefault(name, [0, 0, 0])[0]
class1[name].append(score)
print('Score added')
with open('class1.csv', 'w', newline='') as outf:
FIELD_NAMES = ['name', 'score0', 'score1', 'score2']
writer = csv.DictWriter(outf, FIELD_NAMES)
writer.writeheader()
writer.writerows(dict(zip(FIELD_NAMES, [name] + scores))
for name, scores in class1.items())
print('File written')
严肃的问题:为什么nam代替了名字,为什么sco代替了分数?另外,如果您试图序列化保存dict对象,为什么要使用csv?这是互操作性的问题吗?如果没有,为什么不改为pickle?用append模式而不是write模式打开文件?几乎,我希望能够打开文件,这样我就可以更改最旧的值,而不仅仅是再次将它们添加到文件中。例如,我想打开Sue的分数并将其从4,1,5更改为1,5,7。未使用0,0,7创建另一个Sue。请打开文件,读取数据,更改值,然后写入新文件。你最初的问题很容易引起误解。似乎您希望不断地将数据追加到此文件中。实际上,您需要做的是使用更改的值创建一个新文件。您可以覆盖原始文件,但无法在位编辑csv文件。