当前位置: 代码迷 >> python >> Python错误日志模式匹配
  详细解决方案

Python错误日志模式匹配

热度:34   发布时间:2023-07-16 10:26:47.0

我是python新手,想认真学习。 我正在编写一个函数来提取模式之间的内容。 日志文件构造如下

<Time-stamp>[Begin cache] <...Some content>
<Time-stamp>. 
<Time-stamp>.
<Time-stamp>.
<Time-stamp>.
<Time-stamp>[ERROR] <..Some content>
<Time-stamp>.
<Time-stamp>.
<Time-stamp>.
<Time-stamp>.
<Time-stamp>[End cache] <....some content>
<Time-stamp>.
<Time-stamp>.
<Time-stamp>.
<Time-stamp>[Begin cache] <... Some content>
<Time-stamp>.
<Time-stamp>.
<Time-stamp>.
<Time-stamp>[End cache] <... Some content>

我只在它们之间存在错误模式的情况下,才有兴趣提取开始缓存和结束缓存之间的部分。 到目前为止,我编写的代码无法达到目标。 我使用的逻辑是查找存在ERROR标记的Begin缓存模式和End缓存模式的位置,并在这些位置之间打印文件。 任何帮助将不胜感激。

import re
import os
import mmap
File="\\\\XXXXX\c$\EGO\soam\work\XXXX_20140307.03\dal_XXXX_YYYY_20140320_110536_21_6508.log"
with open(File,"r") as file:
    m=mmap.mmap(file.fileno(),0,access=mmap.ACCESS_READ)
    mpattern="\[ERROR\]"
    spattern="Begin cache"
    epattern="End cache"
    mregexp=re.compile(mpattern)
    sregexp=re.compile(spattern)
    eregexp=re.compile(epattern)
    for match in sregexp.finditer(m):
        epos=eregexp.match(m,match.end())
        if mregexp.match(m,match.end(),epos):
            print("%s"%(m,match.start(),epos))

我也希望有一些很好的教程来快速入门这种难以置信的简单而令人困惑的语言。

您只需扫描日志文件中的[ERROR]并获取所需的文本,其中Regex仅用于拆分从日志文件读取的数据。 我建议使用以下示例方法:

数据格式更改后进行编辑

使用正则表达式:\\ [[[^ R] \\ w + \\ s \\ w + \\]分割列表并查看ERROR部分,如以下示例所示:

import re
f = open('logfile', 'r')
data = f.read()
f.close()
mylist = re.split(r'\[[^R]\w+\s\w+\]',data)
for item in mylist:
    if '[ERROR]' in item:
        print item

编辑

一些可以帮助您了解更多python的地方:

希望这对您有所帮助。