在python 2.7.2中没有进入for循环

在python 2.7.2中没有进入for循环,python,csv,python-2.7,for-loop,Python,Csv,Python 2.7,For Loop,下面是我用来操作CSV文件的代码。它没有进入第二和第三个for循环 import csv f=open("/Users/shivendraagrawal/Desktop/Training Dataset.csv","rU") cr = csv.reader(f) mapping={} out={} i=0 for row in cr: i=i+1 mapping[row[0]]=0 out[row[0]]=0 for row in cr: prin

下面是我用来操作CSV文件的代码。它没有进入第二和第三个for循环

import csv
f=open("/Users/shivendraagrawal/Desktop/Training Dataset.csv","rU")
cr = csv.reader(f)
mapping={}
out={}
i=0
for row in cr:
      i=i+1
      mapping[row[0]]=0
      out[row[0]]=0
for row in cr:
      print "hi"
      mapping[row[0]]=mapping[row[0]]+row[5]
      if row[6]=="TRUE":
            out[row[0]]=out[row[0]]+1

for row in cr:
      print mapping[row[0]] +'  '+out[row[0]]

print i   

您不止一次地使用迭代器,但迭代器只是单发的

阅读时只需将
cr
内容复制一份,然后反复阅读:

cr_copy = [c for c in cr]
for row in cr_copy:
或者,有一种更类似python的方法可以做到这一点:您可以使用()克隆迭代器三次:

使用
f.seek(0)
在第一个和第二个循环之后,例如在第二个循环之前倒回:

f.seek(0)
for row in cr:
    # loop code 
阅读:


试试看

在第一个和第二个循环之后,您需要将其倒带到初始位置。我认为我的迭代器只为一个for循环的作用域定义。不是吗?如果没有,你能建议我怎么做吗?阅读下面我发布了一个答案@Vladimir Sinenko也发布了我也尝试了另一个迭代器。(第1行,第2行)但结果是一样的。我只是希望有一种方法可以接受不止一个答案。知道了。令人惊叹的呈现:)为什么我在“cr”上迭代时,你要倒回“f”对象?非常感谢,它现在可以工作了。@Shivendra我刚从链接页面学到这个技巧。通过
cr
不重置。@Shivendra这是
csv
模块设计方式的一部分。
读卡器的位置链接到文件指针的位置。推进
读取器
将文件指针向前移动;再次向后移动文件指针将重置
读取器
@poorsod感谢学习者我发布了此答案。你能提供一些链接来进一步阅读吗?@GrijeshChauhan这基本上是因为CSV阅读器可以在任何iterable上工作。以下是文档及其迭代方式;这是上面的文件。如果您使用的是Python3,则文件对象的实现略有不同,尽管它们公开相同的接口。
f.seek(0)
for row in cr:
    # loop code