我正在尝试创建一个列表,该列表将从gradebook.csv
获取数据并将其更改为其他格式。
gradebook.csv包含与数据类似的列:
{ studentID , assignment1 , assignment2 , . . . assignmentN }
{ 2343 , , 34.2 , }
空单元格是没有提交的作业。带数字的单元格代表等级。这些数据将进入格式列表:
{ studentID , assignmentid , grade }
{ 2343 , assignment2 , 34.2 }
最终结果将把这些数据放入sql server 2012中的sql表中。下面的代码可以实现我想要的,但仅适用于gradebook.csv
中的最后一行。我做错了什么?
import csv
with open('gradebook.csv','rb') as g:
gr=csv.reader(g)
for row in gr:
if row[0]=='User ID':
pass
else:
studentid=row[0]
individualassignments=[]
everyone=[]
for element in row[1:]:
if element=='':
pass
else:
individualassignments.append(element)
individualassignments.append(studentid)
everyone.append(individualassignments)
答案 0 :(得分:3)
看起来您为外部everyone
循环的每次迭代清除了everyone=[]
列表(通过设置for
)。因此,只有csv文件中的最后一行才会出现在列表中。
要修复,您需要在循环之外声明everyone
import csv
with open('gradebook.csv','rb') as g:
gr=csv.reader(g)
everyone=[] # declare everyone here
for row in gr:
if row[0]=='User ID':
pass
else:
studentid=row[0]
individualassignments=[]
for element in row[1:]:
if element=='':
pass
else:
individualassignments.append(element)
individualassignments.append(studentid)
everyone.append(individualassignments)