将csv列转换为行的python代码
将csv列转换为行的python代码
我试图创建一个列表,它将从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)
问题原因:在每次外层循环迭代时,你清空了everyone列表(通过设置everyone=[]),所以只有csv文件中的最后一行会被保存在列表中。
解决方法:需要在循环外部声明everyone列表。
import csv with open('gradebook.csv','rb') as g: gr=csv.reader(g) everyone=[] # 在此处声明everyone列表 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)
这是我一开始没有注意到的明显答案。