我想分别读取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 :(得分: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'])
答案 1 :(得分: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