python项目实践:log处理,提取日志中的性能数据

python能十分方便地进行文本处理,文本数据分析、提取、替换或综合应用都十分轻松,以下在项目中需要对日志中性能数据提取并写入到xls,方便对性能优劣分析,以下 项目可以作为一个模板进行改造升级应用:

一、源代码(亲测可用)

#!/usr/bin/env python
import os
import sys
import re

FILTER_1 = "10(0 failed) times"
FILTER_2 = "perf data"

FUN_NAME = ['test func perf']

def filter(file_path, filters, out_list):
    """
    根据filters条目 搜索file_path文件里对应的性能数据(数字数据)
    file_path 文件路径
    filters 刷选条目
    out_list 输出结果,格式为[筛选条目 数据]
    """
    flag = False
    base_name = os.path.basename(file_path)
    path_list = []
    for fun_name in filters:
        txt_content = []
        with open(base_name, 'r', encoding = 'UTF-8', errors = 'ignore') as fr:
            for txt_line in fr.readlines():
                txt_content.append(txt_line.rstrip('\n')) #去掉每行末尾的换行符
            for line in txt_content:
                ret = line.find(fun_name)
                if -1 == ret:
                    continue
                if txt_content.index(line) + 1 <= len(txt_content):
                    real_line = line + txt_content[txt_content.index(line) + 1] #拼接下一行,处理log太长分两行打印
                else:
                    real_line = line
                ret = real_line.find(FILTER_1)
                if -1 == ret:
                    continue
                chrno = real_line.find(FILTER_2)
                if -1 != chrno: #如过返回的是正数,则代表找到
                    out_list.append('%s \t %s\n' % (fun_name, re.search(r'\d+', real_line[chrno:]).group()))

def write2xls(xls_name, xls_content):
    with open('%s.xls' % xls_name, 'a+') as fw:
        fw.writelines(xls_content)

def ergodic_file(root_path, out_list, postfix):
    """
    查找当前目录所有以postfix为后缀的文件
    root_path 搜索目录
    out_list 搜索结果储存列表
    postfix 文件后缀名
    """
    if os.path.isdir(root_path):
        for file in os.listdir(root_path):
            sub_path = os.path.join(root_path, file)
            if os.path.isfile(sub_path):
                if sub_path.endswith(postfix):
                    out_list.append(sub_path)
    else:
        print("---Not a dir---")
        return 0
    if not out_list:
        print("No %s file have found." % (postfix))
        return 0
    return 1


def ger_info_by_type(flist, fun_list):
    '''
    根据提供的信息查找文件对应内容,并写入xls
    flist 文件列表
    fun_list 函数名列表
    '''
    for file in flist:
        out = []
        filter(file, fun_list, out)
        write2xls('performance', out)


def main():
    xls_file_list = []
    txt_file_list = []
    print("---find start, please wait---")
    #删除当前目录下的*.xls文件
    ergodic_file(sys.path[0], xls_file_list, ".xls")
    for xls_file in xls_file_list:
        os.remove(xls_file)
    #开始刷选
    ret = ergodic_file(sys.path[0], txt_file_list, ".txt")
    if ret:
        ger_info_by_type(txt_file_list, FUN_NAME)
    else:
        print("get info failed")
    print("search done") 


# main begin
if __name__=='__main__':
    main()
    os.system("pause")

二、使用

1、目录下放置需要分析的日志txt文件,可以放多个

注意,处理多个文件的策略:按照“filters”条目查找所有文件完毕后,再查找下一个条目内容
在这里插入图片描述

2、测试log日志如下

在这里插入图片描述

3、运行方式1:直接点击py文件运行

在这里插入图片描述

4、运行方式2:在文件夹空白位置下,shift+鼠标右击,打开cmd 敲命令运行

在这里插入图片描述
在这里插入图片描述

5、输出结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值