Python错误日志模式匹配

时间:2014-03-24 07:48:49

标签: python regex pattern-matching logfile

我是一个蟒蛇新手,想要学习它的硬道理。我正在编写一个函数来提取模式之间的内容。日志文件构造如下

<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>

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

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))

我还希望有一些很好的教程,可以快速启动这种令人难以置信的简单但令人困惑的语言。

1 个答案:

答案 0 :(得分:0)

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

数据格式更改后

编辑

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

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:

learnpython.org

python.org/tutorial

sthurlow.com/python

希望这会有所帮助。