从 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.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')
我正在尝试创建一段代码,它会询问您的姓名和分数,然后将您最近的分数保存到 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.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')