读取文件写入报表

import matplotlib.pyplot as plt
import math
import pandas as pd
import numpy as np
import xlsxwriter
import os
from openpyxl import load_workbook

‘’’
获取文件列表path_list
‘’’
def receive_file_list(path):
if (os.path.exists(‘hw_form’)):
pass
else:
path_list = os.listdir(path)
print(path_list)
return path_list

‘’’
增益列表存放到列表GAIN_LIST
‘’’
#读取GAIN的函数
def find_GAIN(path):
data_GAIN_LIST = []
GAIN_list = []
path_list = receive_file_list(path)

for i in range(len(path_list)):
        with open(path + '/' + path_list[i], 'r') as file:
            data_GAIN = file.readline()
            data_GAIN_LIST .append(data_GAIN)
for i in range(len(data_GAIN_LIST)):
    GAIN = float(data_GAIN_LIST[i][5:10])
    GAIN_list.append(GAIN)
print(GAIN_list)
return GAIN_list

‘’’
相关数据的运算
‘’’
#读数据的函数
def find_single_data(filename):
print(path +’/’ + filename)
data = np.loadtxt(filename,skiprows=2)
return data

#把data按列进行分块函数
def data_split(data,i,j):
List = data[:, i:j]
return List

#求maxrE
def que_maxrE(L3,L5):
maxrE = np.max(np.sqrt(pow(10,L3/10)+ pow(10,L5/10)))
return maxrE
#求Co,Cx

def que_Co_Cx(L3,L4,L5,L6,maxrE):
Co = (pow(10,L3/20)* np.exp(1j * np.deg2rad(L4))+ pow(10,L5/20)* np.exp(1j * np.deg2rad(L6))) * 0.707 / maxrE
Cx = (pow(10,L3/20)* np.exp(1j * np.deg2rad(L4))- pow(10,L5/20)* np.exp(1j * np.deg2rad(L6))) * 0.707 / maxrE
return Co,Cx

#把所有的虚数值转化为dB值
def change_dB(mul):
mul_reshaped = mul.reshape(181, 360)
dB_value = 20 * np.log10(abs(mul_reshaped))
return dB_value
#重构Co,Cx的矩阵
def reshape_array(array):
array_H = np.hstack((array[270:360] , array[0:271]))
return array_H

#求出二维数组最大值及其索引
def the_maxium_index(mul):
pos = np.unravel_index(np.argmax(mul), mul.shape)
indx = pos[0]
indy = pos[1]
maxium = mul[indx,indy]
return indx,indy,maxium
‘’’
参数相关的计算函数
‘’’
‘’’
1.HBM,HBM 10dB
‘’’
#找出与max-3dB最接近的数字的索引
def return_3dB_index(maxium,array):
target = maxium - 3
index = (np.abs(array-target)).argmin()
return index
#找出max-10dB最接近的数字的索引
def return_10dB_index(maxium,array):
target = maxium - 10
index = (np.abs(array-target)).argmin()
return index
#求HBM, HBM10dB的值
def return_HBM(maxium,array,split_number):
split_number+=90
array_A = array[0:split_number]
array_B = array[split_number:360]
index1 = return_3dB_index(maxium,array_A)
index2 = split_number + return_3dB_index(maxium,array_B)
HBM = index2 - index1
return HBM
def return_HBM_10dB(maxium,array,split_number):
split_number+=90
array_A = array[0:split_number]
array_B = array[split_number:360]
index1 =return_10dB_index(maxium,array_A)
index2 = split_number + return_10dB_index(maxium,array_B)
HBM_10dB = index2 - index1
return HBM_10dB
‘’’
2.VBM,VBM 10dB
‘’’
#求VBM, VBM10dB的值
def return_VBM(maxium,array,split_number):
array_A = array[0:split_number]
array_B = array[split_number:180]
index1 = return_3dB_index(maxium,array_A)
index2 = split_number + return_3dB_index(maxium,array_B)
VBM = index2 - index1
return VBM
def return_VBM_10dB(maxium,array,split_number):
array_A = array[0:split_number]
array_B = array[split_number:180]
index1 =return_10dB_index(maxium,array_A)
index2 = split_number + return_10dB_index(maxium,array_B)
VBM_10dB = index2 - index1
return VBM_10dB
‘’’
3.FBR(Co),FBR(Cx)
‘’’
def return_FBR_C(array,maxium):
array_new = np.hstack((array[0:30] , array[330:360]))
FBR_C = maxium - np.max(array_new)
return FBR_C
‘’’
4.XPD 0 ,XPD 60 ,XPD -60
‘’’
def return_XPD(CoH,CxH,degree):
XPD = CoH[degree] - CxH[degree]
return XPD

#创建文件夹
def create_dir_not_exist(path):
if not os.path.exists(path):
os.mkdir(path)
def create_dir(filename):
create_dir_not_exist(filename)
os.chdir(filename)
#使列表保留两位小数
def keep_two_digits(pixel_real_recognition_value):
list_ori = list(pixel_real_recognition_value) #原始列表
mid_np = np.array(list_ori) #列表转数组
mid_np_2f = np.round(mid_np,2) #对数组中的元素保留两位小数
list_new = list(mid_np_2f) #数组转列表
return list_new
#对Horit_list,Vorit_list分别减去180,90写入表格
def Horit_slove(Horit_list):
list_ori = list(Horit_list) #原始列表
Horit_array = np.array(list_ori) #列表转数组
Horit_new_1 = Horit_array - 180
Horit_new = list(Horit_new_1)
return Horit_new

def Vorit_slove(Vorit_list):
list_ori = list(Vorit_list) #原始列表
Vorit_array = np.array(list_ori) #列表转数组
Vorit_new_1 = Vorit_array - 90
Vorit_new = list(Vorit_new_1)
return Vorit_new

#找出异常元素
def find_error(list,limit):
i_lower = [i for (i,x) in enumerate(list) if x < limit]
x_lower = [x for (i,x) in enumerate(list) if x < limit]
return i_lower,x_lower
#开始标记单元格
def signing_cell_C(worksheet1,ilist,xlist,style):
if len(ilist) != 0 :
for i in range(len(ilist)):
worksheet1.write(‘C’ + str(ilist[i] + 2), xlist[i], style)
def signing_cell_L(worksheet1,ilist,xlist,style):
if len(ilist) != 0 :
for i in range(len(ilist)):
worksheet1.write(‘L’ + str(ilist[i] + 2), xlist[i], style)
def signing_cell_M(worksheet1,ilist,xlist,style):
if len(ilist) != 0 :
for i in range(len(ilist)):
worksheet1.write(‘M’ + str(ilist[i] + 2), xlist[i], style)
def signing_cell_N(worksheet1,ilist,xlist,style):
if len(ilist) != 0 :
for i in range(len(ilist)):
worksheet1.write(‘N’ + str(ilist[i] + 2), xlist[i], style)
def signing_cell_O(worksheet1,ilist,xlist,style):
if len(ilist) != 0 :
for i in range(len(ilist)):
worksheet1.write(‘O’ + str(ilist[i] + 2), xlist[i], style)
def signing_cell_P(worksheet1,ilist,xlist,style):
if len(ilist) != 0 :
for i in range(len(ilist)):
worksheet1.write(‘P’ + str(ilist[i] + 2), xlist[i], style)
‘’’
作图函数
‘’’
#GAIN,HBW,GBW 10dB类,一个数据,有上下限
def draw_picture_gain(list,limit_number_up,limit_number_low):
plt.figure(figsize=(10, 5)) # 设置画布的尺寸
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.xlabel(u’File_Id’, fontsize=14) # 设置x轴,并设定字号大小
plt.ylabel(u’Gain(dBi)’, fontsize=14) # 设置y轴,并设定字号大小
x = np.arange(0, len(list)) + 1
x[0] = 1
my_x_ticks = np.arange(1,len(list) + 1, 1)
my_y_ticks = np.arange(1, limit_number_up + 5, 1)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)
plt.axis([1, len(list), limit_number_low - 5, limit_number_up + 5])
limit_number_up_list = [limit_number_up] * len(list)
limit_number_low_list = [limit_number_low] * len(list)

plt.grid()
plt.plot(x,list, color="deeppink", linewidth=2, marker='o')
plt.plot(x,limit_number_up_list, color="darkblue", linewidth=1, linestyle='--', marker='+')
plt.plot(x,limit_number_low_list, color="goldenrod", linewidth=1, linestyle='--', marker='+')

#HBW的折线图 单列表,有上下限
def draw_picture_HBW(list,limit_number_up,limit_number_low):
plt.figure(figsize=(10, 5)) # 设置画布的尺寸
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.xlabel(u’File_Id’, fontsize=14) # 设置x轴,并设定字号大小
plt.ylabel(u’HBW(°)’, fontsize=14) # 设置y轴,并设定字号大小
x = np.arange(0, len(list)) + 1
x[0] = 1
my_x_ticks = np.arange(1,len(list) + 1, 1)
my_y_ticks = np.arange(limit_number_low -10, limit_number_up + 10, 10)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)
plt.axis([1, len(list), limit_number_low -10,limit_number_up + 10])
limit_number_up_list = [limit_number_up] * len(list)
limit_number_low_list = [limit_number_low] * len(list)

plt.grid()
plt.plot(x,list, color="deeppink", linewidth=2, marker='o')
plt.plot(x,limit_number_up_list, color="darkblue", linewidth=1, linestyle='--', marker='+')
plt.plot(x,limit_number_low_list, color="goldenrod", linewidth=1, linestyle='--', marker='+')

#HBW_10dB 单列表,有上下限
def draw_picture_HBW_10dB(list,limit_number_up,limit_number_low):
plt.figure(figsize=(10, 5)) # 设置画布的尺寸
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.xlabel(u’File_Id’, fontsize=14) # 设置x轴,并设定字号大小
plt.ylabel(u’HBW_10dB(°)’, fontsize=14) # 设置y轴,并设定字号大小
x = np.arange(0, len(list)) + 1
x[0] = 1
my_x_ticks = np.arange(1,len(list) + 1, 1)
my_y_ticks = np.arange(limit_number_low -20, limit_number_up + 10, 10)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)
plt.axis([1, len(list), limit_number_low -20,limit_number_up + 10])
limit_number_up_list = [limit_number_up] * len(list)
limit_number_low_list = [limit_number_low] * len(list)

plt.grid()
plt.plot(x,list, color="deeppink", linewidth=2, marker='o')
plt.plot(x,limit_number_up_list, color="darkblue", linewidth=1, linestyle='--', marker='+')
plt.plot(x,limit_number_low_list, color="goldenrod", linewidth=1, linestyle='--', marker='+')

#FBR 双列表,有下限
def draw_picture_FBR(list_a,list_b,limit_number_low):
plt.figure(figsize=(10, 5)) # 设置画布的尺寸
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.xlabel(u’File_Id’, fontsize=14) # 设置x轴,并设定字号大小
plt.ylabel(u’FBR(dBi)’, fontsize=14) # 设置y轴,并设定字号大小
x = np.arange(0, len(list_a)) + 1
x[0] = 1
my_x_ticks = np.arange(1,len(list_a) + 1, 1)
my_y_ticks = np.arange(1, limit_number_low + 10, 1)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)
plt.axis([1, len(list_a),limit_number_low - 5, limit_number_low + 10])
limit_number_low_list = [limit_number_low] * len(list_a)

plt.grid()
plt.plot(x,list_a, color="deeppink", linewidth=2, marker='o')
plt.plot(x, list_b, color="darkblue", linewidth=2, marker='o')
plt.plot(x,limit_number_low_list, color="goldenrod", linewidth=1, linestyle='--', marker='+')

#XPD 0 类 ,一个数据,只有下限
def draw_picture_XPD_0(list,limit_number_low):
plt.figure(figsize=(10, 5)) # 设置画布的尺寸
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.xlabel(u’File_Id’, fontsize=14) # 设置x轴,并设定字号大小
plt.ylabel(u’XPD_0(dBi)’, fontsize=14) # 设置y轴,并设定字号大小
x = np.arange(0, len(list)) + 1
x[0] = 1
my_x_ticks = np.arange(1,len(list) + 1, 1)
my_y_ticks = np.arange(1, limit_number_low + 15, 1)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)
plt.axis([1, len(list), limit_number_low - 5, limit_number_low + 15])
limit_number_low_list = [limit_number_low] * len(list)

plt.grid()
plt.plot(x,list, color="deeppink", linewidth=2, marker='o')
plt.plot(x,limit_number_low_list, color="goldenrod", linewidth=1, linestyle='--', marker='+')

#XPD ±60 类 ,一个数据,只有下限
def draw_picture_XPD_60(list_a,list_b,limit_number_low):
plt.figure(figsize=(10, 5)) # 设置画布的尺寸
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.xlabel(u’File_Id’, fontsize=14) # 设置x轴,并设定字号大小
plt.ylabel(u’XPD_±60(dBi)’, fontsize=14) # 设置y轴,并设定字号大小
x = np.arange(0, len(list_a)) + 1
x[0] = 1
my_x_ticks = np.arange(1,len(list_a) + 1, 1)
my_y_ticks = np.arange(1, limit_number_low + 20, 1)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)
plt.axis([1, len(list_a), limit_number_low - 5, limit_number_low + 20])
limit_number_low_list = [limit_number_low] * len(list_a)

plt.grid()
plt.plot(x,list_a, color="deeppink", linewidth=2, marker='o')
plt.plot(x, list_b, color="darkblue", linewidth=2, marker='o')
plt.plot(x,limit_number_low_list, color="goldenrod", linewidth=1, linestyle='--', marker='+')

#读取并处理文件夹下所有文件的目录
def find_all_data(path):
os.chdir(path)
path_list = receive_file_list(path)
#GAIN的获取
GAIN_list = find_GAIN(path)
#循环体外创建列表用于存储数据
HBM_list = []
HBM_10dB_list = []
VBM_list = []
VBM_10dB_list = []
FBR_Co_list = []
FBR_Cx_list = []
XPD_0_list = []
XPD_60_list = []
XPD_sub60_list = []
Horit_list = []
Vorit_list = []

for i in range(len(path_list)):
    data = find_single_data(path_list[i])
    L3 = data_split(data,2,3)
    L4 = data_split(data,3,4)
    L5 = data_split(data,4,5)
    L6 = data_split(data,5,6)
    #求出maxrE
    maxrE = que_maxrE(L3,L5)
    print(maxrE)
    #求出CoCx矩阵
    Co_Cx = que_Co_Cx(L3,  L4,  L5,  L6,  maxrE)
    Co = Co_Cx[0]
    Cx = Co_Cx[1]
    print('==========================')
    print(np.max(abs(Co)))
    Cx = Co_Cx[1]
    print(np.max(abs(Cx)))
    #判断具体谁为Co,Cx
    if np.max(abs(Co)) < np.max(abs(Cx)):
        Co, Cx = Cx, Co


    #转化为dB值进行处理
    Co_dB = change_dB(Co)
    Cx_dB = change_dB(Cx)


    #求出函数最大值及其二维索引
    param_Co = the_maxium_index(Co_dB)
    param_Cx = the_maxium_index(Cx_dB)
    indx_Co = param_Co[0]
    indy_Co = param_Co[1]
    maxium_Co = param_Co[2]
    indx_Cx = param_Cx[0]
    indy_Cx = param_Cx[1]
    maxium_Cx = param_Cx[2]
    print(indx_Co,indy_Co,maxium_Co)
    print(indx_Cx,indy_Cx,maxium_Cx)


    #取出max对应在CoH,CxH的行列
    CoH_i = Co_dB[indx_Co]
    CxH_i = Cx_dB[indx_Cx]
    CoV = Co_dB[:,indy_Co]
    CxV = Cx_dB[:,indy_Cx]

    #其中把CoH,CxH的后90行移到前面
    CoH = reshape_array(CoH_i)
    CxH = reshape_array(CxH_i)

    '''
    HBW,HBM 10dB
    '''

    #在CoH中max-3dB搜索对应的索引为HBW
    HBM = return_HBM(maxium_Co,CoH,indy_Co)
    HBM_10dB = return_HBM_10dB(maxium_Co, CoH,indy_Co)

    HBM_list.append(HBM)
    HBM_10dB_list.append(HBM_10dB)
    print(HBM_list)
    print(HBM_10dB_list)

    '''
       VBW,VBM 10dB
    '''

    VBM = return_VBM(maxium_Co, CoV,indx_Co)
    VBM_10dB = return_VBM_10dB(maxium_Co, CoV,indx_Co)

    VBM_list.append(VBM)
    VBM_10dB_list.append(VBM_10dB)
    print(VBM_list)
    print(VBM_10dB_list)

    '''
    FBR(Co),FBR(Cx)
    '''

    FBR_Co = return_FBR_C(CoH,maxium_Co)
    FBR_Cx = return_FBR_C(CxH,maxium_Co)
    FBR_Co_list.append(FBR_Co)
    FBR_Cx_list.append(FBR_Cx)

    print(FBR_Co_list)
    print(FBR_Cx_list)

    '''
    XPD 0 ,XPD 60 ,XPD -60
    '''
    XPD_0     = return_XPD(CoH, CxH, 180)
    XPD_60    = return_XPD(CoH, CxH, 240)
    XPD_sub60 = return_XPD(CoH, CxH, 120)
    XPD_0_list.append(XPD_0)
    XPD_60_list.append(XPD_60)
    XPD_sub60_list.append(XPD_sub60)

    print(XPD_0_list)
    print(XPD_60_list)
    print(XPD_sub60_list)

    '''
    Horit Vorit 
    '''
    Horit = int(np.argwhere(CoH == maxium_Co))
    Vorit = int(np.argwhere(CoV == maxium_Co))
    Horit_list.append(Horit)
    Vorit_list.append(Vorit)
    print(Horit_list)
    print(Vorit_list)

'''
填表
'''

create_dir('hw_form')
book = xlsxwriter.Workbook('hw_form.xlsx')
title_1 = ['Frequency(MHZ)', 'Gain', 'Directivity', 'Losses', 'Horit', 'Vorit', 'HBW', 'HBW  10dB', 'VBW',
           'VBW 10dB', 'FBR Co', 'FBR Cx', 'XPD 0', 'XPD -60', 'XPD 60', 'SIR', 'Squint 3dB', 'EDE', 'THP 10dB',
           'FSU', 'SS 0°~-30°', 'SS -30°~-150°', 'THP 10dB']
title_A = ['PORT1 07']
title_B = path_list
title_C = keep_two_digits(GAIN_list)
title_F = Horit_slove(Horit_list)
title_G = Vorit_slove(Vorit_list)
title_H = HBM_list
title_I = HBM_10dB_list
title_J = VBM_list
title_K = VBM_10dB_list
title_L = keep_two_digits(FBR_Co_list)
title_M = keep_two_digits(FBR_Cx_list)
title_N = keep_two_digits(XPD_0_list)
title_O = keep_two_digits(XPD_sub60_list)
title_P = keep_two_digits(XPD_60_list)

#找出异常元素
c_ilist, c_xlist = find_error(title_C, 14)
l_ilist, l_xlist = find_error(title_L, 19)
m_ilist, m_xlist = find_error(title_M, 19)
n_ilist, n_xlist = find_error(title_N, 20)
o_ilist, o_xlist = find_error(title_O, 10)
p_ilist, p_xlist = find_error(title_P, 10)



#工作表样式
style1 = book.add_format({
    'border': 1, # 边框
    # 'align': 'center', # 水平居中
    # 'valign': 'vcenter', # 垂直居中
    'bold': True, # 加粗(默认False)
    'font': u'宋体', # 字体
    'fg_color': '#CCFFFF', # 背景色
    'color': 'black' ,#字体颜色
})

style2 = book.add_format({
    'border': 1, # 边框
    'font_size':12,
    'align': 'center', # 水平居中
    'valign': 'vcenter', # 垂直居中
    'font': u'宋体', # 字体
    'fg_color': 'white', # 背景色
    'color': 'black', #字体颜色
})

style3 = book.add_format({
    'border': 1, # 边框
    'font_size': 12,
    'align': 'center', # 水平居中
    'valign': 'vcenter', # 垂直居中
    'bold': True, # 加粗(默认False)
    'font': u'宋体', # 字体
    'fg_color': 'red', # 背景色
    'color': 'black' #字体颜色
})
worksheet1 = book.add_worksheet('data')
#写入表头文件
worksheet1.set_row(0, 30)
worksheet1.set_column('B:B', 40)
worksheet1.write('A1','',style1)
worksheet1.write_row('B1',title_1,style1)
worksheet1.write_column('A2', title_A, style1)
worksheet1.write_column('B2', title_B, style1)
worksheet1.write_column('C2', title_C, style2)
worksheet1.write_column('F2', title_F, style2)
worksheet1.write_column('G2', title_G, style2)
worksheet1.write_column('H2', title_H, style2)
worksheet1.write_column('I2', title_I, style2)
worksheet1.write_column('J2', title_J, style2)
worksheet1.write_column('K2', title_K, style2)
worksheet1.write_column('L2', title_L, style2)
worksheet1.write_column('M2', title_M, style2)
worksheet1.write_column('N2', title_N, style2)
worksheet1.write_column('O2', title_O, style2)
worksheet1.write_column('P2', title_P, style2)
#异常元素标记
signing_cell_C(worksheet1, c_ilist, c_xlist, style3)
signing_cell_L(worksheet1, l_ilist, l_xlist, style3)
signing_cell_M(worksheet1, m_ilist, m_xlist, style3)
signing_cell_N(worksheet1, n_ilist, n_xlist, style3)
signing_cell_O(worksheet1, o_ilist, o_xlist, style3)
signing_cell_P(worksheet1, p_ilist, p_xlist, style3)



worksheet2 = book.add_worksheet('chart')

draw_picture_gain(GAIN_list ,13,15)
plt.savefig('Gain.png', dpi=600, bbox_inches='tight')
worksheet2.insert_image('A1', 'Gain.png')

draw_picture_HBW(HBM_list, 120, 60)
plt.savefig('HBW.png', dpi=600, bbox_inches='tight')
worksheet2.insert_image('A25', 'HBW.png')

draw_picture_HBW_10dB(HBM_10dB_list, 140, 110)
plt.savefig('HBW_10dB.png', dpi=600, bbox_inches='tight')
worksheet2.insert_image('A50', 'HBW_10dB.png')

draw_picture_FBR(FBR_Co_list,FBR_Cx_list, 19)
plt.savefig('FBR.png', dpi=600, bbox_inches='tight')
worksheet2.insert_image('A75', 'FBR.png')

draw_picture_XPD_0(XPD_0_list, 20)
plt.savefig('XPD_0.png', dpi=600, bbox_inches='tight')
worksheet2.insert_image('A100', 'XPD_0.png')

draw_picture_XPD_60(XPD_60_list,XPD_sub60_list,10)
plt.savefig('XPD_60.png', dpi=600, bbox_inches='tight')
worksheet2.insert_image('A125', 'XPD_60.png')
book.close()
os.remove('Gain.png')
os.remove('HBW.png')
os.remove('HBW_10dB.png')
os.remove('FBR.png')
os.remove('XPD_0.png')
os.remove('XPD_60.png')

if name == ‘main’:
# 路径名
path = ‘C:/Users/tWX5331009/PycharmProjects/python_work/excel_plt2/form/cocx’
#求出所有数据
find_all_data(path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值