为什么我不能为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
。