Python:在一段时间内通过CSV迭代



我有一个我试图迭代的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]

注意:对不起,我的原始代码和末日/开始时间有一些小错误,这并不影响人们的答案,但是我在最终答案中更改了(其中一些是因为我重命名的变量以减少混淆)

最新更新