下面是我的CSV数据集。
a,d,g
b,e,h
c,f,i
我想将这3列分开为row[0], row[1], and row[2]
。
并将它们作为3个不同的列表。
这是我的代码:
import csv
file1 = open('....my_path.csv')
Row_0 = [row[0].upper() for row in csv.reader(file1)]
Row_1 = [row[1].upper() for row in csv.reader(file1)]
Row_2 = [row[2].upper() for row in csv.reader(file1)]
print Row_0
print Row_1
print Row_2
但是,我只能从控制台看到Row_0
结果。但Row_1
和Row_2
始终显示[ ]
。这意味着我只能看到第一行,但不能看到第二行和后续行。
['A', 'B', 'C']
[]
[]
有没有人可以帮我处理这个“简单”问题?
答案 0 :(得分:3)
open
会返回iterator,在您迭代一次后会变得疲惫不堪(不再可用)。此外,每次执行csv.reader(file1)
时,csv.reader
将尝试迭代file1
引用的迭代器。这意味着,在第一次调用之后,此迭代器将耗尽,并且对csv.reader
的所有后续调用都将使用空迭代器。
要做你想做的事,你需要这样的东西:
import csv
file1 = open('....my_path.csv')
Row_0, Row_1, Row_2 = ([row[0].upper(), row[1].upper(), [row[2].upper()]
for row in csv.reader(file1))
print Row_0
print Row_1
print Row_2
现在,我们在一次读取中获取所有数据,并且只迭代迭代器一次。
另外,如果您想知道,我使用的代码称为generator expression。您还可以使用list comprehension:
Row_0, Row_1, Row_2 = [[row[0].upper(), row[1].upper(), [row[2].upper()]
for row in csv.reader(file1)]
但我没有看到建立一个列表只是为了扔掉它。
答案 1 :(得分:0)
您已阅读整个文件!在你第一次理解后检查档案位置,
您可以在理解之间seek(0)
或只迭代一次,或者以@kdopen声明重新打开文件