一、数据清洗
def read_file(path, newfile, ret):
"""
读取path文件夹里面的所有文件,并在path的父目录下新建newfile文件,利用正则表达式将匹配到的内容写入到newfile文件中
:param path: 要读取的文件夹
:param newfile: 要存放的文件名
:param ret: 正则表达式,用于提取需要的数据
:return: 利用正则表达式将文件写入完成后,返回newfile的绝对路径
"""
files = os.listdir(path)
current_dir = os.path.dirname(path)
filepath = os.path.join(current_dir, newfile)
if os.path.exists(filepath):
os.remove(filepath)
for file in files:
file = path + '\\' + file
try:
with open(file, 'r', encoding='utf-8', errors='ignore') as f:
with open(filepath, 'a', encoding='utf-8') as fb:
for line in f:
res = re.search(ret, line)
if res is not None:
fb.write(line)
except LookupError:
return '文件不存在或没有权限访问!请管理员检查!'
return filepath
上述脚本获取path文件夹下所有文件名称保存到列表files中,之后拼接newfile的本地路径filepath,判断本地是否存在filepath,如果存在则删除,循环列表files,打开文件file,创建文件filepath,判断文件file中符合正则表达式的数据存放到filepath中。
二、提取数据,统计分析
import time
import re
import os
def read_file(path, newfile, ret):
"""
读取path文件夹里面的所有文件,并在path的父目录下新建newfile文件,利用正则表达式将匹配到的内容写入到newfile文件中
:param path: 要读取的文件夹
:param newfile: 要存放的文件名
:param ret: 正则表达式,用于提取需要的数据
:return: 利用正则表达式将文件写入完成后,返回newfile的绝对路径
"""
files = os.listdir(path)
current_dir = os.path.dirname(path)
filepath = current_dir + newfile
if os.path.exists(filepath):
os.remove(filepath)
for file in files:
file = path + '\\' + file
try:
with open(file, 'r', encoding='utf-8', errors='ignore') as f:
with open(filepath, 'a', encoding='utf-8') as fb:
for line in f:
res = re.search(ret, line)
if res is not None:
fb.write(line)
except LookupError:
return '文件不存在或没有权限访问!请管理员检查!'
return filepath
def read_log(path, newfile, ret, split):
"""
调用函数read_file()读取path文件夹里面的所有文件,并在path的父目录下新建newfile文件,利用正则表达式将匹配到的内容写入到newfile文件中。
读取newfile文件的内容,将需要的内容用正则分割(e.g.:接口号,接口调用时长),提取需要的内容
:param path: 要读取的文件夹
:param newfile: 要存放的文件名
:param ret: 正则表达式,用于提取需要的数据
:param split: 正在表达式,将提取到的数据进行分割
:return: 统计分割后的数据的第一个值和第二个值
"""
global interface_dict
start = time.time()
file = read_file(path, newfile, ret)
end = time.time()
print("函数read_file()运行耗时共:%.2f秒" % (end - start))
if os.path.exists(file):
n = 0
avg = 0
count = 0
interface_sum = {}
interface_dict = {}
with open(file, 'r', encoding='utf-8') as f:
for line in f:
res = re.search(ret, line)
if res is not None:
ctime = re.search(ret, line).group()
num = re.split(split, ctime)
interface_value = int(num[1])
if interface_value > 1000:
if num[0] not in interface_sum:
interface_sum[num[0]] = 0
interface_dict[num[0]] = 0
interface_sum[num[0]] += interface_value
interface_dict[num[0]] += 1
count += int(num[1])
n += 1
avg = count / n
interface_list = sorted(interface_dict.items(), key=lambda x: x[1])
for d in interface_list:
if d[1] >= 1:
interface_s = interface_sum[d[0]]
interface_avg = interface_s / d[1]
print('接口%s调用总次数为:%d次,接口总调用时长为:%dms,平均时长为:%.2fms' % (d[0], d[1], interface_s, interface_avg))
end = time.time()
print('函数read_log()运行耗时共:%.2f秒' % (end - start))
return '调用接口总次数为:%d次,接口运行总时长为:%dms,平均时长为:%.2fms' % (n, count, avg)
else:
return '文件不存在或没有权限访问!请管理员检查!'
c = read_log(r'E:\common', 'common.log', '[GCPU][0-9]*\s+执行时间\s+[0-9]*', '\s+执行时间\s+')
print(c)