我是一个蟒蛇新手,想要学习它的硬道理。我正在编写一个函数来提取模式之间的内容。日志文件构造如下
<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))
我还希望有一些很好的教程,可以快速启动这种令人难以置信的简单但令人困惑的语言。
答案 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:
希望这会有所帮助。