我试图从我的csv文件中逐列打印数据。
column, column2, column3, column4, column5, column6, column7 = [], [], [], [], [], [], []
for each in data:
column.append(each[0])
column2.append(each[1])
column3.append(each[2])
column4.append(each[3])
column5.append(each[4])
column6.append(each[5])
column7.append(each[6])
print column
print column2
print column3
print column4
print column5
print column6
print column7
这给出了正确的打印,我可以按列显示数据,但是当我尝试时:
c=[]
for i in xrange(7):
for each in data:
c.append(each[i])
print c
c = []
正确打印第1列,所有列都空白! 我到底哪里出错?
答案 0 :(得分:3)
columns = zip(*data)
那就是你需要的一切
for column in zip(*data):
print column
答案 1 :(得分:2)
您的代码存在的问题是,data
是一次性iterator(无论是csv.reader
还是您自己编写的内容)。一旦你第一次到达文件末尾的最后一行,for each in data:
就会给你最后一行之后的所有行,其中没有。
你可以通过关闭文件,重新打开文件并在其周围包装另一个阅读器来解决此问题。或者通过调用文件上的f.seek(0)
。或者通过将整个文件读取为可重复迭代的内容,如字符串列表,并迭代它。但实际上,这些都不是很好的解决方案。
更好的想法就是扭转你的循环:
c=[[] for _ in xrange(7)]
for each in data:
for i in xrange(7):
c[i].append(each[i])
for col in c:
print col
现在它等同于原始代码,除非没有重复。
更好的想法就是使用zip
来转置数据,就像在Joran Beasley's answer中一样:
for col in zip(*data):
print col