github开源项目介绍-使用pygrok轻松解析字符串(log, event..)

原创 2014年07月26日 17:32:52

        Pygrok是一个开源的Python字符串解析库,github地址:https://github.com/garyelephant/pygrok。正如其项目主页所述,它可以用来解析字符串形式的log, event等,将字符串中有用信息提取出来。这个字符串解析库支持正则表达式匹配,它提供了众多预定义的字符串匹配模式,既有正则表达式的超强匹配能力,又有简单的易用性。pygrok底层也是利用正则表达式实现的。








        使用pygrok只需要了解一个简单的接口grok_match(),一个简单的例子:

        我们的任务是从'gary is male, 25 years old and weighs 68.5kilograms'这样的字符串中获得“姓名”,“性别”,“年龄”,“体重”信息。

>>> import pygrok
>>> text = 'gary is male, 25 years old and weighs 68.5 kilograms'
>>> pattern = '%{WORD:name} is %{WORD:gender}, %{NUMBER:age} years old and weighs %{NUMBER:weight} kilograms'
>>> print pygrok.grok_match(text, pattern)
{'gender': 'male', 'age': '25', 'name': 'gary', 'weight': '68.5'}
        Pattern是为需要解析的字符串定义好的匹配模式,以使grok_match()知道如何进行匹配。

        WORD,NUMBER,是模式的名称。WORD代表要匹配的一个单词,相当于正则表达式的“\b\w+\b”,NUMBER代表要匹配的是一个数字(整数或包含小数点),相当于正则表达式的“(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))”。看起来有点晦涩复杂,但是一般使用时无需关注这些细节,只需要使用“NUMBER”来匹配数字即可,pygrok提供了多个通过模式名称即可明白其可匹配内容的模式,如“IP”,” QUOTEDSTRING”, “DATE”。看,多简单!!

        %{WORD:name}的意思是要匹配一个单词,这个单词提取出来后可以通过“name”引用。其他的类似。所以最后得到结果:{'gender': 'male', 'age': '25', 'name': 'gary','weight': '68.5'}



        这个例子太简单吗?来个高大上的,从nginxlog中获取domain, ip, timestamp, uripath, referrer, web browser:

>>> import pygrok

>>> text = 'edge.v.iask.com.edge.sinastorage.com 14.18.243.65 6.032s - [21/Jul/2014:16:00:02 +0800]' \
...     + ' "GET /edge.v.iask.com/125880034.hlv HTTP/1.0" 200 70528990 "-"' \
...     + ' "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)' \
...     + ' Chrome/36.0.1985.125 Safari/537.36"'

>>> pat = '%{HOST:host} %{IP:client_ip} %{NUMBER:delay}s - \[%{DATA:time_stamp}\]' \
...     + ' "%{WORD:verb} %{URIPATHPARAM:uri_path} HTTP/%{NUMBER:http_ver}" %{INT:http_status} %{INT:bytes} %{QS}' \
...     + ' %{QS:client}'

>>> m = pygrok.grok_match(text, pat)

>>> import pprint
>>> pprint.pprint(m, indent = 4)
{   'bytes': '70528990',
    'client': '"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"',
    'client_ip': '14.18.243.65',
    'delay': '6.032',
    'host': 'edge.v.iask.com.edge.sinastorage.com',
    'http_status': '200',
    'http_ver': '1.0',
    'time_stamp': '21/Jul/2014:16:00:02 +0800',
    'uri_path': '/edge.v.iask.com/125880034.hlv',
    'verb': 'GET'
}

        这里又出现了几个模式:INT,匹配整形数字;IP,匹配ip v4或ipv6;HOST,匹配域名;URIPATHPARAM,匹配http://后面的url地址及参数。正如开始所说,既有正则表达式的超强匹配能力,又有简单的易用性。


(图片来源:http://kovshenin.com/2014/fail2ban-wordpress-nginx/)

(图片来源:http://www.greenleafheatingandcooling.com/high-efficiency/)



转载本文请注明作者和出处[Gary的影响力]http://garyelephant.me,请勿用于任何商业用途!
Author: Gary Gao( garygaowork[at]gmail.com) 关注互联网、分布式、高性能、NoSQL、自动化、软件团队

支持我的工作:  https://me.alipay.com/garygao




版权声明:本文为博主(微博@Gary的影响力)原创文章,未经博主允许不得转载。博客地址:http://garyelephant.me https://blog.csdn.net/gaoyingju/article/details/38147415

Github项目解析系列

Github项目解析系列主要解析的是平时开发过程中遇到的小项目小例子,自己总结的一些研发技巧与实践,以及一些Github中流行的项目等...
  • qq_23547831
  • qq_23547831
  • 2016-03-23 20:42:40
  • 2600

Android Studio如何使用GitHub上的开源项目

转载请注明出处以SlidingMenu开源项目为例 去github上搜索SlidingMenu,找到自己喜欢的download到本地。 将download下来的压缩包解压,把解压出来的library重...
  • sin574
  • sin574
  • 2016-10-25 14:31:54
  • 2024

Android studio 使用github上的android开源项目

一般github上面的开源项目都会生成一个library(就是工具类库,可随意命名的),我们就是想要用里面的东西。 以开源项目https://github.com/liaohuqiu/android...
  • u014774589
  • u014774589
  • 2016-01-09 18:20:31
  • 3113

iOS:Github上的开源项目集合

转载地址:http://blog.csdn.NET/hbblzjy/article/details/52083919 下拉刷新 EGOTableViewPullRefresh - 最早的下拉...
  • liuq0725
  • liuq0725
  • 2016-12-15 16:03:27
  • 2893

Android商城开源项目--轻松购

轻松购.是一款购物性Android端app.项目主要分为主页、热卖、分类、购物车、我的五大板块.该app基本上覆盖市面上商机级商城类app的功能,包括购物车、微信及支付宝支付、热门及历史搜索、登录注册...
  • gaolh89
  • gaolh89
  • 2017-12-28 20:52:02
  • 315

如何用Intellij IDEA优雅的在GitHub开源项目

通过在本地使用Intellij IDEA建立工程并上传到GitHub实现云端代码存储和版本控制。...
  • tyc129
  • tyc129
  • 2017-05-16 11:11:47
  • 530

openpoker开源项目 源代码解析

转载:http://hpyhacking.iteye.com/blog/1166481 最近主攻erlang编程,erlang在处理网络并发可谓具有语言上的天赋,而这恰恰能帮我解决很...
  • zhangxinrun
  • zhangxinrun
  • 2012-04-19 14:09:30
  • 2836

如何在GitHub上发现优秀的开源项目

如果作为一名程序员,你连GitHub都没有听过或者用过的话,那真是太遗憾了。GitHub的使用可是程序员在职业生涯中的一项必备技能啊,最近在网上搜了一下,发现有好多童鞋都在提问GitHub的使用教程,...
  • shenjie12345678
  • shenjie12345678
  • 2016-10-30 16:07:16
  • 16259

如何使用github上的开源项目

以提交的一次开源代码为例,教会你步入开源的世界。 1,首先登陆到https://github.com平台上注册一个自己的账号,这个过程就不演示了 2,然后在左上部分输入一个开源项目的名字,...
  • u012889638
  • u012889638
  • 2015-10-13 10:11:43
  • 4259

如何将Github上的开源项目集成到我们的项目——Android篇

一般来说,Github上的项目可以分为两种:作为一个完整的项目和作为库发布的项目。 一、作为一个完整的项目         对于这种项目,我们通过eclipse或者androi...
  • rockmilk1
  • rockmilk1
  • 2016-02-22 22:11:23
  • 3327
收藏助手
不良信息举报
您举报文章:github开源项目介绍-使用pygrok轻松解析字符串(log, event..)
举报原因:
原因补充:

(最多只允许输入30个字)