1

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

1 回答 1

4

看起来您为外部循环的每次迭代清除了everyone列表(通过设置)。因此,只有 csv 文件中的最后一行会出现在列表中。everyone=[]for

要修复,您需要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)
于 2013-07-03T21:45:26.213 回答