在日志文件中搜索值,直到其更改为止,然后对值进行分组和计数

时间:2019-01-24 19:30:42

标签: python-3.x

我有一些日志文件(如下所示),并且喜欢通过python脚本进行搜索。 脚本搜索值TestingTask,直到它改变为止。 在这两行之间,我还截取了其他信息。 如果出现这种情况,我想打印两次更改之间的时间。 因此,例如对于此日志文件,我希望该消息类似于

Plugged=1

希望这个问题是可以理解的,有人可以帮助我解决这个问题。 谢谢进阶

2018-08-16 00:05:17.96 till 2018-08-16 00:07:25.949 = plugged=1 and has 4 lines

2018-08-16 00:07:25.949 till 2018-08-16 00:07:56.961 = plugged=0 and has 2 lines

1 个答案:

答案 0 :(得分:1)

您可以将itertools.groupby与键功能一起使用,该功能提取输入的plugged=部分作为键:

import re
from itertools import groupby
from functools import partial
from operator import itemgetter
print('\n'.join('{2} till {3} = plugged={0} and has {1} lines'.format(k[0], len(l), *(' '.join(s.split()[:2]) for s in itemgetter(0, -1)(l))) for k, g in groupby(filter(lambda l: 'plugged=' in l, f), key=partial(re.findall, r'\bplugged=(\d+)')) if k for l in (list(g),)))

使用示例输入,将输出:

2018-08-16 00:05:17.962 till 2018-08-16 00:07:25.949 = plugged=1 and has 4 lines
2018-08-16 00:07:25.949 till 2018-08-16 00:07:56.961 = plugged=0 and has 2 lines