为什么我不能为csv.Reader重复“ for”循环?


问题内容

我是Python的初学者。我现在尝试弄清楚为什么第二个“ for”循环在以下脚本中不起作用。我的意思是,我只能得到第一个“
for”循环的结果,而第二个则没有任何结果。我在下面复制并粘贴了脚本和数据csv。

如果您告诉我为什么它会以这种方式运行以及如何使第二个“ for”循环也起作用,这将对您有所帮助。

我的脚本:

import csv

file = "data.csv"

fh = open(file, 'rb')
read = csv.DictReader(fh)

for e in read:
    print(e['a'])

for e in read:
    print(e['b'])

“ data.csv”:

a,b,c
tree,bough,trunk
animal,leg,trunk
fish,fin,body

问题答案:

csv阅读器是文件的迭代器。遍历一次后,您将读取文件的末尾,因此不再需要阅读。如果您需要再次进行遍历,则可以查找到文件的开头:

fh.seek(0)

这会将文件重新设置为开头,因此您可以再次阅读。根据代码,可能还需要跳过字段名称标头:

next(fh)

这对于您的代码来说是必需的,因为DictReader第一次使用该行来确定字段名称,因此不再需要这样做。对的其他用途可能没有必要csv

如果文件不是太大,并且您需要对数据做几件事,那么您也可以将整个内容读入一个列表中:

data = list(read)

然后,您可以做自己想做的事情data