我有一个我试图迭代的CSV文件,并且只有当它的时间戳落在指定范围内时才能做某事。我正在使用一段时间循环来执行此操作,在每次我每次添加30秒的地方,但是由于某种原因,它首次使用循环而不是每个添加时间在CSV上迭代(尽管我知道这是成功的完成时循环本身)。我不确定问题是什么。
try:
csvfilename = sys.argv[1]
except:
csvfilename = "myCSVfile.csv"
csvfile = csv.DictReader(open(csvfilename,'rb'),delimiter=',')
startTime = 1402617311
endTime = 1419544361
while startTime < endTime:
for line in csvfile:
if (startTime + 30) > timeToEpoch(line['EnterTime']) >= startTime:
output = calcFunction(line['EnterN'],line['ExitN'],line['user'])
startTime = startTime + 30
每个请求是使用CSV模块打印的CSV文件的几行(对可读性进行了一些格式化,名称的差异和我的示例是因为我稍微更改了它们):
{
'Time Exit': '17:02:04',
'Duration': '0:02:34',
'Date': '12/7/14',
'ExitN': '12/7/14 17:02',
'PlayerSpace': '1',
'EnterN': '12/7/14 16:59',
'Time Enter': '16:59:30'
}
{
'Time Exit': '17:08:18',
'Duration': '0:08:46',
'Date': '12/7/14',
'ExitN': '12/7/14 17:08',
'PlayerSpace': '2',
'EnterN': '12/7/14 16:59',
'Time Enter': '16:59:32'
}
{
'Time Exit': '17:06:49',
'Duration': '0:04:20',
'Date': '12/7/14',
'ExitN': '12/7/14 17:06',
'PlayerSpace': '3',
'EnterN': '12/7/14 17:02',
'Time Enter': '17:02:29'
}
第一次迭代 csvfile
时,您就不会产生更多的值。
解决问题的一种解决方案可能是将所有行复制到列表中,可以多次迭代:
startTime = 1402617311
endTime = 1419544361
csv_lines = list(csvfile) # <-
while startTime < endTime:
for line in csv_lines: # <-
if (startTime + 30) > timeToEpoch(line['EnterTime']) >= endTime:
output = calcFunction(line['EnterN'],line['ExitN'],line['user'])
startTime = startTime + 30
,所以这是基于安德里亚(Andrea每30秒迭代一次(使它真的很慢),所以我对其进行了调整,并稍微使其更快地使其变得更快,因为我所有的时间都是顺序的:
line = list(csv_data) #Convert into a list
lineCount = line[n] # Done so I can iterate line by line
while (startTime + 30) > timeToEpoch(lineCount['EnterN']) >= startTime:
print "time on"
pc = playerCount(lineCount['EnterN'],lineCount['ExitN'],lineCount['Player'])
n += 1
lineCount = line[n]
注意:对不起,我的原始代码和末日/开始时间有一些小错误,这并不影响人们的答案,但是我在最终答案中更改了(其中一些是因为我重命名的变量以减少混淆)