读取文件并分隔到不同的列表

时间:2014-12-15 23:37:19

标签: python csv

下面是我的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_1Row_2始终显示[ ]。这意味着我只能看到第一行,但不能看到第二行和后续行。

['A', 'B', 'C']
[]
[]

有没有人可以帮我处理这个“简单”问题?

2 个答案:

答案 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声明重新打开文件