繁体   English   中英

从csv文件中的字典中读取

[英]Reading from a dictionary in a csv file

我正在尝试创建一段代码,它会询问您的姓名和分数,然后将您最近的分数保存到csv文件中。 我设法让它检查你是否在字典中并将你的3个最新分数存储在csv文件中。 但是,我不知道如何让代码打开它保存的文件,这意味着每次保存字典后它只有你的最新商店并删除其他所有内容。

这就是我所拥有的:

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={}因为在导入字典时需要添加它。

您正在寻找'a'参数(附加到文件),而不是'w'。

如果这不回答问题,我会将其删除。 我不明白这次投票。

以下尝试使用csv文件中的数据初始化class1字典。 如果失败是因为它是第一次并且文件不存在,则将其设置为空字典。

接下来,它通过添加新条目或更新现有条目来更新此字典,然后在结束时使用更新的字典中的值重写整个文件。

请注意,使用csv.DictReadercsv.DictWriter ,每一行也都是一个字典。 在这种情况下,使用csv.readercsv.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')

暂无
暂无

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

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