【发布时间】:2015-03-27 23:12:08
【问题描述】:
我是一个非常新手的 Python 用户,试图对 .csv 文件中的数据列求和。我找到了其他真正帮助我入门的答案(例如here 和here)。
但是,我的问题是我想遍历我的文件以获取所有列的总和。
我的格式化数据如下所示:
z y x w v u
a 0 8 7 6 0 5
b 0 0 5 4 0 3
c 0 2 3 4 0 3
d 0 6 7 8 0 9
或者像这样的 .csv 格式:
,z,y,x,w,v,u
a,0,8,7,6,0,5
b,0,0,5,4,0,3
c,0,2,3,4,0,3
d,0,6,7,8,0,9
目前,我只是想让迭代工作。我会担心以后的求和。这是我的代码:
import csv
data = file("test.csv", "r")
headerrow = data.next()
headerrow = headerrow.strip().split(",")
end = len(headerrow)
for i in range (1, end):
for row in csv.reader(data):
print row[i]
这是我得到的:
>>>
0
0
0
0
>>>
因此,它会为每一行打印索引 1 处的值,但不会继续通过其他索引。
我在这里遗漏了什么明显的东西?
更新:
根据非常有用的建议和解释,我现在有了这个:
import csv
with open("test.csv") as data:
headerrow = next(data)
delim = "," if "," == headerrow[0] else " "
headerrow = filter(None, headerrow.rstrip().split(delim))
reader = csv.reader(data, delimiter=delim, skipinitialspace=True)
zipped = zip(*reader)
print zipped
strings = next(zipped)
print ([sum(map(int,col)) for col in zipped])
这会返回一个错误:
Traceback (most recent call last):
File "C:\Users\the hexarch\Desktop\remove_total_absences_test.py", line 9, in <module>
strings = next(zipped)
TypeError: list object is not an iterator
我不明白这个...?对不起!
【问题讨论】:
-
只使用 csv 模块,不要预解析任何东西。您正在改变文件对象的状态。