我有一个嵌套的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个日期,并正确地格式化了它们。但是第二个问题一直在增加它开始的行数,我不知道为什么?在
csv
变量正在屏蔽csv
模块。这是一个等待发生的未来错误。在也就是说,
csv
变量也是文件读取器的包装器。你不需要重置它,所以它只会拉进越来越高的线。在如果您想在文件的开头重新启动迭代器,您可能应该将所有数据读入一个列表。在
因为您在外循环的开头用枚举器初始化csv。所以它只是不断地从读者那里获取下一个值。在
如果您想在每次进入内部循环时重新开始,可以按照Austing的建议先将所有值读入列表中,或者在内部循环之前创建新的reader和enumerator
相关问题 更多 >
编程相关推荐