我是python3的新手,需要一些帮助来解决以下考试。
有一个csv文件: id;姓名;数学;编程;英语;艺术;驾驶执照 1; Skye Davies; 4.7293186886448; 1.00694439962034; 1.50237929698571; 2;是 2; Bailey Porter; 2.04878889095744; 2.80668511477619; 1.06892193978582; 4; 3; Brett West; 3.69508976848625; 1.28352644513587; 2.89631143320307; 3;
我需要做的是创建一个函数readdatabase(filename)
。此函数必须读取文件并将内容加载到名为rawdata
的临时变量中。
填写gradebook
变量并返回它。此变量必须是词典列表,其中每个词典都以
{"name":string,"id":integer,'driving license':bool,"Math":float,"English":int,"Art":int,"Programming":int,"passed":bool}
我必须遍历rawdata
变量,将数据转换为正确的类型,然后将其分配给字典中的正确键。原始文件包含每个主题的平均值(浮动)。将这些转换为1-5的等级。唯一的新字段(不包含在原始文件中)是:“已通过”。如果学生的成绩不为“ 1”,则该值必须为True。
我现在所拥有的:
def readdatabase(filename):
csvfile=open(filename,'r')
csvreader = reader(csvfile, delimiter=';')
rawdata=[]
for row in csvreader:
rawdata.append(row)
csvfile.close()
keys=rawdata[0]
gradebook=[]
for column in rawdata:
rawdata=[dict(zip(rawdata[0][column].split(';'), v[column].split(';'))) for v in rawdata[1:]]
return gradebook
gradebook=readdatabase('gradebook.csv')
成绩册1应该给出以下内容:
{'Art': 4,
'English': 1,
'Math': 2,
'Programming': 3,
'driving license': False,
'id': 2,
'name': 'Bailey Porter',
'passed': False}
非常感谢。
答案 0 :(得分:0)
您可能想引用csv.DictReader类:
with open("myfile.csv") as f:
reader = csv.DictReader(f, delimiter=';')
data = [r for r in reader]
然后data
中的每个项目都是字典。
答案 1 :(得分:0)
最后,我用它来完成考试:
def readdatabase(文件名):
csvfile=open(filename,'r')
csvreader = reader(csvfile, delimiter=';')
gradebook=[]
bl = 'Yes'
next(csvreader)
for lines in csvfile:
le=lines.split(';')
ide=le[0]
name=le[1]
Math=round(float((le[2])))
Programming=round(float((le[3])))
English=round(float((le[4])))
Art=int(le[5])
driving=bl in (le[6])
if Math > 1 and Programming > 1 and English > 1 and Art > 1:
passed='True'
else:
passed="False"
gradebook.append({"id":ide,"name":name,"Math":Math,"Programming":Programming,"English":English,"Art":Art, "driving license":driving, "passed":passed})
csvfile.close()
return gradebook