```python
#-*-coding:gbk-*-
import matplotlib.pyplot as plt
import numpy as np
import os
import chardet
def kernels(kernel_num): #高斯滤波内核设置
a=np.arange(kernel_num)+1
for num in range((len(a)-1)//2):
a[-(num+1)]=a[num]
b= a.reshape(1,-1)
ave=np.sum(b)
#print(b)
return b,ave
def datacreate(name):
print('find ',name)
path='./'+name
f = open(path,'rb') # 先用二进制打开
data = f.read() # 读取文件内容
file_encoding = chardet.detect(data).get('encoding') # 得到文件的编码格式
input1 = open(path,'r', encoding=file_encoding) #读取文件
source = input1.read()
source_list=source.split('\n') #每行分割
time_list=[]
process_list=[]
mean_list=[]
max_list=[]
print('initialize.....')
for line in source_list:
if '刀具异常磨损均值判断' not in line: #识别存在平均值的行
continue
time=line.split('[')
#print(time)
time=time[1].split(']')
time_hour=time[0][6:8]+'--'+time[0][12:17] #时间
time_list.append(time_hour)
process_num=time[1].split('样本子程序号')
process_num=process_num[1].split(' ') #程序号
process_list.append(process_num[0])
mean_num=process_num[-1].split('当前均值')
mean_list.append(mean_num[-1]) #均值
max_num=process_num[-3].split('样本上限均值')
max_list.append(max_num[-1])
#print(max_num[-1],mean_num[-1])
var_process=sorted(list(set(process_list))) #去除重复值和排序
if '2007' in var_process:
var_process.remove('2007')
if '7300' in var_process: #去除无效的波形
var_process.remove('7300')
plt.figure(figsize=(20,90))
sum_process=len(var_process) #看看有几个图
for i,process in enumerate(var_process):
mean_sums=[]
time_display=[]
for k,process_num in enumerate((process_list)):
if process == process_num:
mean_sums.append(mean_list[k]) #提取对的程序号的值
time_display.append(time_list[k]) #同理,提取时间
max_num=max_list[k]
ax=plt.subplot(sum_process,1,i+1)
#ax.plot([10,len(mean_sums)-10],[float(max_num),float(max_num)], color="red")
#plt.plot([10,len(mean_sums)-10],[np.array(mean_sums,dtype=float).max(),np.array(mean_sums,dtype=float).max()], color="red")
orign_data=np.array(mean_sums,dtype=float)
new_data=orign_data.copy()
kernel,k=kernels(filt_size)
for num in range(len(orign_data)-(filt_size-1)):
#print((orign_data[num:num+5].reshape(-1,1)))
if filt_size==1:
break
new_data[num+(int((filt_size-1)/2))]=(np.inner(orign_data[num:num+filt_size].reshape(1,-1),kernel))/k #高斯滤波
#new_data[num+(int((filt_size-1)/2))]=np.sum(orign_data[num]+orign_data[num+1]*2+orign_data[num+2]*3+orign_data[num+3]*2+orign_data[num+4])/9
ax.plot(np.array(range(len(mean_sums))),new_data,label=str(process)) #numpy格式处理的快
#plt.plot(11np.array(range(len(mean_sums))),orign_data,label=str(process),color="green")
interval=int((len(mean_sums))//10)
#for m in range(10):
#plt.vlines(interval*m,np.array(mean_sums,dtype=float).min(),np.array(mean_sums,dtype=float).max(),color="red")
#ax.text(interval*m,new_data.min(),str(time_display[interval*m]))
ax.text(0,new_data.max(),'numbers='+str(len(mean_sums)))
ax_top = ax.twiny() #设置上下坐标轴一致
xlim = ax.get_xlim()
ax_top.set_xlim(xlim)
xticks = ax.get_xticks()
#ax.set_xticks(xticks)
ax.axhline(float(max_num), color="red") #画上限线
top_tick = []
top_label = []
for time_times in range(len(xticks)-2):
if xticks[time_times+1]>len(new_data):
break
#ax.axvline(xticks[time_times+1],linestyle='--',color="blue")
top_tick.append(xticks[time_times+1])
#print(time_times+1,xticks[time_times+1])
top_label.append(time_display[int(xticks[time_times+1])]) # 这两行分别是要显示坐标的位置以及置换的标签
if len(new_data)-top_tick[-1]>(top_tick[-1]-top_tick[-2])*0.5:
#print(len(new_data),top_tick[-1],top_tick[-2])
top_tick.append(len(new_data))
top_label.append(time_display[-1])
#ax.axvline(len(new_data),linestyle='--',color="blue")
ax_top.set_xticks(top_tick)
ax_top.set_xticklabels(top_label)
ax.grid(ls='--')
#plt.ylim(np.array(mean_sums,dtype=float).min(),float(max_num)+1)
ax.legend()
#plt.savefig('./'+name.split('.')[0]+'.png')
print('have saved ...'+name.split('.')[0]+'.png')
return new_data
all_name=os.listdir('./')
log_name=[]
filt_size = int(input('输入高斯滤波内核(原始图像输入1)(输入奇数)'))
for name in all_name:
if name[-3:]=='log':
log_name.append(name)
print('找到这几个文件:')
print(log_name)
if not len(log_name)==1:
name_num = int(input('转化第几个?'))
file=log_name[name_num-1]
else :
file=log_name[0]
print(file)
new=datacreate(file)
![在这里插入图片描述](https://img-blog.csdnimg.cn/201909302012442.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMyODI0MzM1,size_16,color_FFFFFF,t_70)