0

所以我的问题感觉有点复杂,也许只是我.. 用外行的话来说,这就是我想要完成的事情.. 我需要获取与您所处的状态相关的最新行,抓住时间戳并将其与当前时间进行比较。

对于我们正在工作的程序,它会保存到日志文件中。有时该文件可能会达到 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!"

必须有一种更简单的方法来编写我想要完成的内容。

4

1 回答 1

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
于 2013-08-14T08:58:04.803 回答