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

miy*_*ara 15 python csv

我是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'])
Run Code Online (Sandbox Code Playgroud)

"data.csv":

a,b,c
tree,bough,trunk
animal,leg,trunk
fish,fin,body
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 31

csv reader是文件的迭代器.一旦你完成它,你会读到文件的末尾,所以没有更多要阅读.如果您需要再次浏览,可以查找文件的开头:

fh.seek(0)
Run Code Online (Sandbox Code Playgroud)

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

next(fh)
Run Code Online (Sandbox Code Playgroud)

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

如果文件不是太大而你需要对数据做几件事,你也可以把整个事情读成一个列表:

data = list(read)
Run Code Online (Sandbox Code Playgroud)

然后你就可以做你想做的事data.