嵌套循环不是从0开始

时间:2016-05-29 19:11:54

标签: python python-2.7 csv

当有人参加比赛时,我有一个嵌套的for循环。我遇到的问题是,如果用户选择的日期不在所持有的日期,我将他们推到下一个“官方”日期。我在csv文件中有一个日期列表,我读得很好。我的问题是我的嵌套循环在csv文件中不断增加它的起始点。

method4

中断是在第二个循环中,只是为了测试循环的起始位置。每当我运行此代码时,我都会得到以下结果:

import csv, time
from datetime import date, timedelta

class RunDates():

    def __init__(self):
        self.enterDate = '4/12/14'
        self.reader = csv.DictReader(open('dates.csv', 'rb'))

    def findRunDate(self):

        # Get the row of entered date or next closest
        csvlist = enumerate(self.reader)
        for i in range(5):
            t = time.strptime(self.enterDate, '%m/%d/%y')
            newdateArr = (date(t.tm_year, t.tm_mon,t.tm_mday)+timedelta(days=i)).strftime('%m/%d/%y').split('/')
            newdateStr = '/'.join( [str(int(newdateArr[0])), str(int(newdateArr[1])), newdateArr[2]] )
            print newdateStr, i

            for num, row in csvlist:
                print row['Date'], num
                break
                if newdateStr == row['Date']:
                    print 'Row Number: ' + str(num)
                    print 'Row Date: ' + row['Date']
                    print 'new Date: ' + newdateStr
                    break
                else:
                    pass



#Testing
a = RunDates()
a.findRunDate()

所以第一个循环出现5个日期并正确格式化它们。但第二个不断增加它开始的行,我不知道为什么?

2 个答案:

答案 0 :(得分:1)

csv变量屏蔽了csv模块。这是一个等待发生的未来错误。

也就是说,csv变量也是文件阅读器的包装器。你没有重置它,所以它只会拉越越来越高的线。

如果要在文件开头重新启动迭代器,您应该只读入所有数据到列表中。

答案 1 :(得分:0)

因为您在外部循环的开头使用枚举器初始化csv。所以它只是不断从阅读器中提取下一个值。

如果你想在每次进入内循环时重新开始,要么首先将所有值读入Austing建议的列表中,要么在内循环之前创建新的阅读器和枚举器