使用python将csv列转换为行

时间:2013-07-03 21:42:02

标签: python sql csv import-from-csv

我正在尝试创建一个列表,该列表将从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)

1 个答案:

答案 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)