【问题标题】:Not entering the for loop in python 2.7.2未在 python 2.7.2 中进入 for 循环
【发布时间】:2023-04-09 00:38:01
【问题描述】:

这是我用来操作 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   

【问题讨论】:

  • 第一次和第二次循环后需要将其倒回初始位置
  • 我认为我的迭代器只为一个 For Loop 的范围定义。不是吗?如果没有,你能建议我怎么做吗?
  • 阅读下面我已经发布了一个答案@Vladimir Sinenko 也发布了

标签: python csv python-2.7 for-loop


【解决方案1】:

您多次使用迭代器,但迭代器仅是单次的。

阅读时复制cr 的内容,然后遍历它:

cr_copy = [c for c in cr]
for row in cr_copy:

或者,有一种更 Pythonic 的方式来做到这一点:您可以使用 itertools.tee (see this post) 克隆迭代器 3 次:

import itertools

cr1, cr2 = itertools.tee(cr)
for row in cr1:
     # first loop

for row in cr2:
     # secondloop

【讨论】:

  • 我也尝试过使用不同的迭代器。 (row1, row2) 但结果是一样的。
  • 我只是希望有一种方法可以接受多个答案。知道了。真棒呈现:)
【解决方案2】:

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

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

阅读:from Python doc code

试试看!!

【讨论】:

  • 为什么在我迭代 'cr' 时要倒回 'f' 对象?非常感谢,它现在正在运行。
  • @Shivendra 我只是从链接页面中学到了窍门。通过cr 未重置。
  • @Shivendra 这是csv 模块设计方式的一部分。 reader 的位置链接到文件指针的位置。推进reader 会向前移动文件指针;再次将文件指针向后移动会重置reader
  • @poorsod 感谢学习者我发布了这个答案。您能否提供一些链接以进一步阅读。
  • @GrijeshChauhan 这基本上是因为 CSV 阅读器可以处理任何迭代。这是file objects 上的文档以及它们的迭代方式;这是CSV readers 上的文档。如果您使用的是 Python 3,则文件对象的实现方式会有所不同,尽管它们公开了相同的接口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2014-04-19
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2022-06-13
相关资源
最近更新 更多