嵌套循环不是从0开始的

2024-05-14 23:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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()

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

^{pr2}$

所以第一个循环产生了5个日期,并正确地格式化了它们。但是第二个问题一直在增加它开始的行数,我不知道为什么?在


Tags: 文件csvimportselffordatetimenum
2条回答

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

也就是说,csv变量也是文件读取器的包装器。你不需要重置它,所以它只会拉进越来越高的线。在

如果您想在文件的开头重新启动迭代器,您可能应该将所有数据读入一个列表。在

因为您在外循环的开头用枚举器初始化csv。所以它只是不断地从读者那里获取下一个值。在

如果您想在每次进入内部循环时重新开始,可以按照Austing的建议先将所有值读入列表中,或者在内部循环之前创建新的reader和enumerator

相关问题 更多 >

    热门问题