所以我的问题感觉有点复杂,也许只是我......把它放在外行人的条件下这就是我想要完成的事情......我需要得到与你所处状态相关的最新一行,从中获取时间戳并将其与当前时间进行比较。
对于我们的工作程序,它保存到日志文件..文件有时可以达到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!"
必须有一种更简单的方式来写我想要完成的事情。
答案 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