2015-10-14 76 views
1

我想单独读取一个csv文件的两列,但是当我编写下面的代码时,python只显示第一列,而第二列没有,但在csv文件中第二列也有很多行。如何在Python中分别读取csv文件的两个字段?

import csv 
import pprint 

f = open("arachnid.csv", 'r') 
read = csv.DictReader(f) 
for i in range(3): 
    read.next() 

for i in read: 
    pprint.pprint(i["binomialAuthority_label"]) 

for i in read: 
    pprint.pprint(i["rdf-schema#label"]) 
+0

你为什么要单独阅读这两个文件?这只是好奇心。 –

+0

不,这是练习的一部分,并在问题指导员问它。 –

回答

1

原因是当你使用DictReader时,它会创建所谓的迭代器/生成器。所以,当你迭代一次的时候,你不能再按照你所做的方式迭代它。

如果你要保持你的逻辑是,你实际上可以致电SEEK(0)您的文件阅读器对象重置为这样的位置:

f.seek(0) 

你迭代下一次在你的dictreader对象它会给你你正在寻找的东西。所以你感兴趣的部分代码会是这样:

for i in read: 
    pprint.pprint(i["binomialAuthority_label"]) 

# This is where you set your seek(0) before the second loop 
f.seek(0) 

for i in read: 
    pprint.pprint(i['rdf-schema#label']) 
0

DictReader实例得到你的第一个for i in read:循环后筋疲力尽,所以当你尝试做你的第二个循环,没有什么可迭代。

想要做什么,一旦您第一次迭代CSV,您可以将文件重新找回到开头,然后创建DictReader的新实例并重新开始。您需要创建新的DictReader实例,否则您需要手动跳过标题行。

f = open(filename) 
read = csv.DictReader(f) 
for i in read: 
    print i 

f.seek(0) 
read = csv.DictReader(f) 
for i in read: 
    print i