在python上迭代两次时出错

时间:2018-04-28 05:13:40

标签: python jupyter-notebook

我在Jupyter-notebook上运行下面的python代码时遇到问题。 当我迭代一次时没关系,但是如果我将代码更改为迭代两次,我会得到错误,为什么会这样?

当我迭代一次时,这是正确的答案。    picture 1:

这是我迭代两次时的错误    picture 2 :

import csv
csvfile = open("sales_rank.csv")
reader=csv.reader(csvfile)
header=next(reader)

category={}
rank={}

for row in reader:
    category.setdefault(row[1],[]).append(row[4]) 

for each in reader:
    rank.setdefault(row[3],[]).append(row[0])

2 个答案:

答案 0 :(得分:1)

第二次执行for <variable> in reader:时,csvfile已经在文件的末尾,因此没有什么可读的。你需要回到文件的开头。

import csv
csvfile = open("sales_rank.csv")
reader=csv.reader(csvfile)
header=next(reader)

category={}
rank={}

for row in reader:
    category.setdefault(row[1],[]).append(row[4]) 

csvfile.seek(0)

for each in reader:
    rank.setdefault(row[3],[]).append(row[0])

答案 1 :(得分:0)

reader是一个迭代器,你的第一个for循环运行直到迭代器完成。所以当你进入第二个循环时,没有什么可以迭代的。在循环之间,您需要重置迭代器。您可以尝试reader.seek(0)重置其位置,我不确定这是否适用于csv.reader。如果这不起作用,您只需再次调用reader = csv.reader(csvfile)即可重置。