我有一个csv文件,其结构如下:
Year-Sem,Course,Studentid,Score
201001,CS301,100,363
201001,CS301,101,283
201001,CS301,102,332
201001,CS301,103,254
201002,CS302,101,466
201002,CS302,102,500
这里每年分为两个学期——01(秋季)和02(春季),数据从2008年到2014年(共14个学期)。现在我要做的是建立一个字典,其中course
和studentid
成为键,并且它们各自的score
由year-sem
作为值排序。所以每个学生的输出应该是这样的:
[(studentid,course):(year-sem1 score,year-sem2 score,...)]
我第一次尝试用这段代码制作[(studentid,course):(score)]
的字典,但得到的错误是IndexError: list index out of range
:
with open('file1.csv', mode='rU') as infile:
reader = csv.reader(infile,dialect=csv.excel_tab)
with open('file2.csv', mode='w') as outfile:
writer = csv.writer(outfile)
mydict = {(rows[2],rows[1]): rows[3] for rows in reader}
writer.writerows(mydict)
当我没有使用dialect=csv.excel_tab
和rU
时,我得到的错误是_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
。你知道吗
如何解决这个错误并用我在上面的文章中提到的结构[(studentid,course):(year-sem1 score,year-sem2 score,...)]
生成字典?你知道吗
如果有重复键,则需要将值存储在某个容器中,如果要对数据进行排序,则需要使用OrderedDict:
这会给你一些类似的东西:
在您自己的代码中,您只存储键的最后一个值,也只使用
writer.writerows(mydict)
编写键,因为您只是迭代dict的键,而不是键和值。如果数据不是按时间顺序排列的,则必须使用itemgetter调用reader对象上的sorted:你选择的方言好像不对。
csv.excel_tab
使用制表符作为分隔符。对于您的数据,默认方言应该可以使用。你知道吗由于在
rU
模式中缺少U
,您在前面得到了关于换行的错误消息。你知道吗这个例子似乎适合我(python3)。你知道吗
相关问题 更多 >
编程相关推荐