我有一些日志文件(如下所示),并且喜欢通过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
答案 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