安装ipython在这里我们就不说了,现在简单的分享一下如用正则将日志转换成字典


先在ipython里导入正则模块

import re


例如:有这样一条日志

a = 'Jul 28 03:10:18 localhost abrt detected unhandled Python exception in 1check_log.py'


设定一个正则匹配规则

re_log = re.compile(r'(?P<logtime>\w+ \d+ [\d:]+) (?P<hostname>\w+ \w+) (?P<program>\w+) (?P<msg>.*)')

 

?P< > : < > 里面要添加的名字

\w+ : 是匹配所以字母

\d+ :  是匹配所有的数字

[\d:]+ : 是多次匹配所有的数字加“ :”


logmatch=re_log.match(a)


match:是代表对比

a: 代表字符串,

logmatch:  代表的对象

这个公式的意思是 re_log 匹配要和字符窜 a 进行匹配


logmatch.groupdict()

 

这个意思是说 以字典的形式打印出来


结果如下:

{'hostname': 'localhost abrt',
 'logtime': 'Jul 28 03:10:18',
 'msg': 'unhandled Python exception in 1check_log.py',
 'program': 'detected'}


如果我们改为使用  findall()函数函数时

re_log.findall(a)


那么就没有前面的key的值 是一个列表(里面有一个元组,并且这个元组有4 组字符串),而不是一个字典;


结果如下:

[('Jul 28 03:10:18',
  'localhost abrt',
  'detected',
  'unhandled Python exception in 1check_log.py')]