Python 从日志文件中获取行外时间戳

Python 从日志文件中获取行外时间戳,python,regex,regex-group,Python,Regex,Regex Group,我有一个代码,它使用给定的正则表达式模式从目录中的多个日志文件中读取所有行: 代码如下: 上面的代码给出了日志文件中所有需要的行,每行末尾都有一个时间戳 ./xx.xx.xx.v1.0_Final:2019-01-30 08:34:46.463 -0800 INFO [626] - Program Ended: xx::xx::xxx::xx for exports [... stuff ...] after 00:26:15 等等 现在我想获取包含时间戳的所有最后一行,即00:26:15,它

我有一个代码,它使用给定的正则表达式模式从目录中的多个日志文件中读取所有行:

代码如下:

上面的代码给出了日志文件中所有需要的行,每行末尾都有一个时间戳

./xx.xx.xx.v1.0_Final:2019-01-30 08:34:46.463 -0800 INFO [626] - Program Ended: xx::xx::xxx::xx for exports [... stuff ...] after 00:26:15
等等

现在我想获取包含时间戳的所有最后一行,即00:26:15,它可能总是不同的 并计算从这些日志文件收集的所有时间戳的总时间和平均时间。

只需将时间戳1添加到您正在使用的正则表达式中即可。 为此,请使用

要获得格式为HH:MM:SS的数字,您有两个数字,一个冒号,两个数字,另一个冒号和另外两个数字。量化,也就是说,你可能会这样写:

\d\d:\d\d:\d\d如果您愿意,您可以{2}这些\d,但对我来说,这似乎更复杂

请注意数字匹配器周围的括号:它们告诉re单独捕获内容,并将其作为match.groupnumber(从1开始)和match.groups(元组)提供。为了确保匹配行的结尾不在中间,你要严格地加上$$,这不应该是必要的,因为.*ID贪婪,但是更清楚。

如果你把它添加到你的正则表达式中,如果你不需要的话,移除你已经拥有的组;否则,您将得到:

pattern=re.compiler'.*用于导出。*\d\d:\d\d:\d\d$'

现在,您可以将其匹配,并获得每次跑步的时间,如下所示: match=pattern.matchlogline;秒=intmatch.group1*60+intmatch.group2*60+intmatch.group3

我上面说过,量化很难,但可以做到,我知道有两个步骤: 首先获取所有的时间戳,然后分别处理它。在这种情况下,增加的复杂性太大了,但是,如果您有不同的想法,最好记住:

.*?:\d{2}:+\d\d$捕获由冒号分隔的任意长度的两位数字,然后可以对其进行简单的分割“:”并执行计算


1它通常指的是时间,而不是持续时间。为了不让你们感到困惑,我在回答中使用了时间戳。日志输出中的实际时间戳是2019-01-30 08:34:46.463,而不是00:26:15

请编辑您的问题,并用正确的缩进发布代码。如果无法编辑您自己的问题,请关闭并再次询问。很抱歉代码不清楚,请编辑并发布代码。此问题确实不清楚。您只想查找时间戳为00:26:15的行,该值是否会变化?另外,如果它们都有相同的时间戳,那么平均值的意义是什么?日志文件中的行是否与您发布的日志文件中的行相同?为什么不将其添加到已排序的模式中?我搜索的模式会给出所有时间戳的列表,这只是上面给出的一个例子,其中包含一行日志…是的,每行的时间戳都不同,因为上面的代码解析所有服务日志文件,只提供传递的时间…我需要平均时间来计算这些服务运行需要多长时间…希望你们现在清楚了。。。
./xx.xx.xx.v1.0_Final:2019-01-30 08:34:46.463 -0800 INFO [626] - Program Ended: xx::xx::xxx::xx for exports [... stuff ...] after 00:26:15