日志分析代码实现(正则表达式)

本文介绍了一种利用正则表达式处理日志文件的方法,并通过具体示例展示了如何提取关键信息并将其转化为结构化的数据格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日志分析代码实现(正则表达式)

  • 思路

        使用正则表达式处理:
            使用正则提取对应内容
            每段数据转换为对应格式
            精简代码,异常处理,代码效率检查

import datetime

import re


logline = '''183.60.212.153 - - [19/Feb/2013:10:23:29 +0800] \
"GET /o2o/media.html?menu=3 HTTP/1.1" 200 16691 "-" \
"Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)"'''

# 使用正则表达式的命名分组,可以直接根据分组名和对应匹配字段
# 进行对应生成新字典

def log_clean(line:str):
    pattern = '''(?P<remote>([\d\.]{7,})) - - \[(?P<time>[^\[\]]+)\] \"(?P<request>[^"]+)\" (?P<status>\d{3}) (?P<size>\d+) \"-\" \"(?P<useragent>[^"]+)\"\s?'''
    regex = re.compile(pattern)
    matcher = regex.fullmatch(line)
    if matcher:  # None时,异常处理
        return { k:operations.get(k,lambda x:x)(v) for k,v in matcher.groupdict().items()}

operations = {
    'time':lambda time: datetime.datetime.strptime(time, '%d/%b/%Y:%H:%M:%S %z'),
    'request': lambda request: dict(zip(('method','url','protocol'),request.split())),
    'status': int,
    'size': int
}

print(log_clean(logline))            本文转自 撒旦搞时间 51CTO博客,原文链接:http://blog.51cto.com/12074120/1980428,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值