Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在日志文件中搜索某个值,直到该值发生更改,然后对这些值进行分组和计数_Python - Fatal编程技术网

Python 在日志文件中搜索某个值,直到该值发生更改,然后对这些值进行分组和计数

Python 在日志文件中搜索某个值,直到该值发生更改,然后对这些值进行分组和计数,python,Python,我有一些日志文件(如下所示),喜欢通过Python脚本搜索它们 脚本将搜索值plucked=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

我有一些日志文件(如下所示),喜欢通过Python脚本搜索它们

脚本将搜索值
plucked=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

您可以使用带有键函数的
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

好的,据我所知,你有一个日志文件。哪些变量的值以
(var=value)
格式存储,您希望在扫描之间检测var的变化?您只需要扫描一个变量的更改还是所有变量的更改?i、 e.您只希望检测Plug是否已更改或是否还有其他变量,您的代码是否会一直运行,或者您是否需要它保存上次代码运行时的状态?导入的唯一值是“Plug=”值,以便我要检测的内容。它不是一个“实时”日志,因此代码需要在日志文件上运行一次,并打印到目前为止的resultTnx!我得到了以下错误“IndexError:list index out range”我已经更新了答案,代码现在忽略了与模式不匹配的行。它几乎可以工作,在整个日志中它显示了以下内容,但没有分组,对吗?正如我在你的“答案”中所评论的,它没有正确分组的原因是,在应该属于同一组的行之间有不匹配的行。我已经相应地更新了代码。请再试一次。有没有办法将代码中的数据放入panadas数据框中?。例如,“结果[2]=2018-08-16 00:00:38.439”和“结果[0]=1”等等?
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