循环的第一次迭代&湿/干运行

时间:2013-08-14 01:13:47

标签: python datetime compare

所以我的问题感觉有点复杂,也许只是我......把它放在外行人的条件下这就是我想要完成的事情......我需要得到与你所处状态相关的最新一行,从中获取时间戳并将其与当前时间进行比较。

对于我们的工作程序,它保存到日志文件..文件有时可以达到50MB ..目前我正在使用以下代码获取最新行:

with open(file_location) as file_object:
    for each_line in file_object:
        if "You're currently in: " in each_line:
            recent_statement = eachLine

在该片段的运行结束时,它可以保证获取您所在的最新“状态”行。

这是整行的样子:

Feb  9 12:34:20 You're currently in: Busy

现在日志文件如何保存的问题是,可能存在相同“状态”的重复,但是不同的时间戳可以基本上重置我的计时器..

因此,如果当前时间是12:56:00,这就是日志文件的外观:

Feb  9 12:33:00 You're currently in: Away
Feb  9 12:35:00 You're currently in: Away

我需要它让计时器说它是23分钟,而不是21 ..最重要的是,如果状态改变我需要计时器重置到新的时间。

示例:

Feb 9 12:48:00 You're currently in: Available
Feb 9 12:49:13 You're currently in: Offline

我需要它回来并拥有现在Offline的当前状态,并且计时器说他们已经处于该状态4分钟。

我目前完成的功能看起来像这样......

def check_elapsed(recent_aux_line,aux):     global dry_run,static_timestamp_recentstatement     timestamp_recentstatement = timestamp_of_line     current_time = datetime.now()

if dry_run == True:
    elapsed_time = current_time - timestamp_recentstatement
    static_timestamp_recentstatement = timestamp_recentstatement
    dry_run = False
elif dry_run == False:
    elapsed_time = current_time - static_timestamp_recentstatement

print sys_time(),"Person has been in",status,"for",elapsed_time

if elapsed_time > timedelta(minutes=4):
    print "Over 4 minutes!"

必须有一种更简单的方式来写我想要完成的事情。

1 个答案:

答案 0 :(得分:0)

一个更清洁的解决方案(如果我理解正确的问题)将是在"You're currently in: "之后忽略包含与前一个文本相同的文本的行。您感兴趣的是在这种情况下未被忽略的最后一行的时间戳。

ignore_if_equal_to = None
with open(file_location) as file_object:
    for each_line in file_object:
        if "You're currently in: " in each_line:
            trail = each_line.split("You're currently in: ")[1:]
            if trail == ignore_if_equal_to:
                continue
            recent_statement = eachLine
            ignore_if_equal_to = trail
print recent_statement