python3 利用re模块实现日志数据的统计

import re

def count_something(log_file, patt):
    ori_dict = {}
    with open(log_file) as  fobj:
        for line in fobj:
            m = patt.search(line)
            if m:
                key = m.group()
                ori_dict[key] = ori_dict.get(key, 0) + 1  #字典值等于get方法,默认为0
    return ori_dict



if __name__ == '__main__':
    apatt = re.compile('(\d+\.){3}\d+')     #预编辑
    bpatt = re.compile('Firefox|MSIE')      #预编辑
    log_file = '/var/log/httpd/access_log'
    print(count_something(log_file, apatt))
    print(count_something(log_file, bpatt))

面向过程的写法

 

 

import re

class CountSomething:
    def __init__(self, file, patt):
        self.file = file
        self.patt = patt

    def __call__(self):
        ori_dict = {}
        with open(self.file) as fobj:
            for line in fobj:
                m = self.patt.search(line)
                if m:
                    key = m.group()
                    ori_dict[key] = ori_dict.get(key, 0) + 1
        return ori_dict

if __name__ == '__main__':
    log_file = '/var/log/httpd/access_log'
    apatt = re.compile('(\d+\.){3}\d+')
    bpatt = re.compile('Firefox|MSIE')
    c = CountSomething(log_file, apatt)
    print(c())
    d = CountSomething(log_file, bpatt)
    print(d())

面向对象的写法

 

 

import re
from collections import Counter

def count_thing(file, patt):
    c = Counter()
    with open(file) as fobj:
        for line in fobj:
            m = patt.search(line)
            if m:
                key = m.group()
                c.update([key])
    return c


if __name__ == '__main__':
    file = '/var/log/httpd/access_log'
    patt = re.compile('(\d+\.){3}\d+')
    print(count_thing(file, patt))

利用Counter模块,进行统计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值