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 敲命令运行