将csv列转换为行的python代码

14 浏览
0 Comments

将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)

0
0 Comments

问题原因:在每次外层循环迭代时,你清空了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)

这是我一开始没有注意到的明显答案。

0