def Match_column_data(file_path,colum_name,to_file_path): """ 有两个sheet中存在相同的列名,列数据是包含关系,根据sheet中的列数据抽取sheet2中 包含sheet1列数据的行数据 :param file_path: 文件路径(包含sheet1,sheet2) :param colum_name: 两个sheet都包含的列名 :param to_file_path: 要写入的文件路径 """ print('开始') file_path = file_path df1 = pd.read_excel(file_path, sheet_name=0) list1 = df1[colum_name].values.tolist() df2 = pd.read_excel(file_path, sheet_name=1) list2 = df2.values.tolist() list3 = [] for i in range(len(list1)): for j in range(len(list2)): if list1[i] == list2[j][1]: list3.append(list2[j]) to_file_path = to_file_path df3 = pd.DataFrame(list3) excelWriter = pd.ExcelWriter(file_path, engine='openpyxl') to_sheet_name = 'result' hcu._excelAddSheet(df3, excelWriter, to_sheet_name) print('匹配列数据完成,并抽出数据写入新的sheet(result)中!')
def get_equipment(file_path, sheet_name, equip_col_name): # 1、按照设备分表 # 1.1存储各个设备的行数,方便导出表 print('根据源数据得出各个设备表,并写入新的sheet..........') equipments_list = [] # 二维list value1:设备名 value2:行号 df = pd.read_excel(file_path, sheet_name=sheet_name) equipments_list = df[equip_col_name].values.tolist() # 不含头标题 unique_list = list(set(equipments_list)) #得出所有设备名(不重复) unique_rows_values_list = [] df_head_list = [df.columns.tolist()] for i in range(len(unique_list)): for j in range(len(equipments_list)): if equipments_list[j] == unique_list[i]: # 根据行将文件抽取出来存入新的sheet unique_rows_values_list.append(df.iloc[j]) # 添加头标题 unique_rows_values_list = df_head_list + unique_rows_values_list df1 = pd.DataFrame(unique_rows_values_list) excelWriter = pd.ExcelWriter(file_path, engine='openpyxl') hcu._excelAddSheet(df1, excelWriter, unique_list[i]) print('%s设备数据抽出,并写入文件成功!!' % unique_list[i]) unique_rows_values_list.clear() # 清空列表为下一个循环 print('\n所有设备数据全部抽出,并写入新的sheet。')
def get_equipment_factory (dir_path,file_name): print('在设备表的基础上,将设备表根据厂家再细分为华为、中兴、爱立信..............') file_path = os.path.join(dir_path, file_name) #读取源文件遍历sheet(设备) df = pd.read_excel(file_path,sheet_name=None) # df_head_list = [df.columns.tolist()] df_head = pd.read_excel(file_path,sheet_name=0) df_head_list = [df_head.columns.tolist()] print('表头为\n',df_head_list) sheets_name = list(df) #遍历sheet,按照厂家再分 df_temp=pd.DataFrame() for i in range (1,len(sheets_name)): huawei_nrows_values = [] # 华为 zte_nrows_values = [] # 中兴 ericsson_nrows_values = [] # 爱立信 # print(sheets_name[i]) #读入文件 df_temp=pd.read_excel(file_path,sheet_name=sheets_name[i]) factory_col_values=df_temp['设备厂家'].values.tolist() for j in range (len(factory_col_values)): if factory_col_values[j]=='华为': huawei_nrows_values.append(df_temp.iloc[j]) elif factory_col_values[j]=='中兴': zte_nrows_values.append(df_temp.iloc[j]) elif factory_col_values[j]=='爱立信': ericsson_nrows_values.append(df_temp.iloc[j]) #添加头标题 huawei_nrows_values=df_head_list+huawei_nrows_values zte_nrows_values=df_head_list+zte_nrows_values ericsson_nrows_values=df_head_list+ericsson_nrows_values #创造文件 df_write_huawei=pd.DataFrame(huawei_nrows_values) df_write_zte=pd.DataFrame(zte_nrows_values) df_write_ericsson=pd.DataFrame(ericsson_nrows_values) #写入文件 to_dir_path=dir_path+r'\get_equipment_factory' to_file_name='设备'+sheets_name[i]+'.xlsx' to_file_path=os.path.join(to_dir_path, to_file_name) df_write_huawei.to_excel(to_file_path,sheet_name='华为',index=False,header=False) excelWriter = pd.ExcelWriter(to_file_path, engine='openpyxl') # hcu._excelAddSheet(df_write_huawei, excelWriter,'huawei') hcu._excelAddSheet(df_write_zte, excelWriter,'中兴') hcu._excelAddSheet(df_write_ericsson, excelWriter,'爱立信') print('设备 %s 按照厂家已经抽出,并写入文件成功!!'%sheets_name[i]) print('\n所有设备已经按照厂家细分完毕!!')
def onenet_warning(file_path,file_name,sheet_name,new_sheet_name): print('%s开始处理数据.............'%file_name) df = pd.read_excel(file_path, sheet_name=sheet_name) # df_value_li = df.values.tolist() #制作onenet_li和the_others_li #制作onenet_li onenet_li = [] nrows=len(df) # print(df.iloc[[0],[1]].values[0][0])#获取第一行第二列单元格的值 colum_index = df.columns.get_loc("告警标题")#获取列名所在列的索引 for i in range(nrows): if pd.isnull(df.iloc[[i],[colum_index]].values[0][0]) : break else: #此处注意索引和真实行数存在两行的差距(即行数-索引=2) onenet_li.append([i,df.iloc[[i],[colum_index]].values[0][0]]) # for i in range(10):#验证是否对照 # print('索引为%d,行数为%d,对应的告警为:%s'%(i,i+2,df.iloc[[i], [colum_index]].values[0][0])) print('单一网元告警list长度为:%d'%len(onenet_li)) print('验证onenet_li二号元素:%s'%onenet_li[0][1]) #制作the_other_li the_others_li = df['告警标题all'].values.tolist() print('除单一网元其余网元告警汇总list长度为:%d'%len(the_others_li)) temp_li=[]#用于临时存储 onenet_nrows = []# 将网元的单一警告对应的行抽出,存储到onenet_nrows[] onenet_warning_collect=[] #开始比对onenet_li和the_others_li,对onenet_li进行一个筛检,只保留其唯一的 for i in range(len(onenet_li)): if onenet_li[i][1] not in the_others_li: if onenet_li[i] not in temp_li:#onenet_li[i][0]是行值,onenet_li[i][1]是告警值 temp_li.append(onenet_li[i])#这个非必须,只用存下面的行即可 onenet_nrows.append(onenet_li[i][0])#这个非必须,只用根据存的行抽取行数据放入onenet_warning_collect onenet_warning_collect.append(df.iloc[onenet_li[i][0]])#根据存取的行数,抽取行信息,存入onenet_warning_collect # onenet_warning_collect.append([df.iloc[onenet_nrows]])#这种也能抽出,但是是一个长度为1的一维数组,不方便pandas写excel #根据行数抽取源文件,存储到一个新的sheet中 print(len(onenet_nrows)) print(len(onenet_warning_collect)) #开始写数据到新的sheet中 df1=pd.DataFrame(onenet_warning_collect)#将二维list转换成dataframe to_file_path=file_path sheet_name=new_sheet_name excelWriter = pd.ExcelWriter(to_file_path,engine='openpyxl') hcu._excelAddSheet(df1, excelWriter, sheet_name) # 为excel添加新的sheet,并将dataframe写入新的sheet(不覆盖其他sheet) print('%s网元处理数据完成,写入文件成功!'%file_name)
to_file_path = to_file_path df3 = pd.DataFrame(list3) excelWriter = pd.ExcelWriter(file_path, engine='openpyxl') to_sheet_name = 'result' hcu._excelAddSheet(df3, excelWriter, to_sheet_name) print('匹配列数据完成,并抽出数据写入新的sheet(result)中!') if __name__ == '__main__': print('开始') file_path=r'E:\Pycharm_workspace\alarm_think\venv\Include\test\2.xlsx' df1=pd.read_excel(file_path,sheet_name=0) list1= df1['设备'].values.tolist() df2=pd.read_excel(file_path,sheet_name=1,usecols=[0,1,2,3]) list2=df2.values.tolist() list3 = [] for i in range(len(list1)): for j in range(len(list2)): if list1[i]==list2[j][1]: list3.append(list2[j]) to_file_path=r'E:\Pycharm_workspace\alarm_think\venv\Include\test\xlsx格式测试工作簿.xlsx' df3 = pd.DataFrame(list3) excelWriter = pd.ExcelWriter(file_path, engine='openpyxl') to_sheet_name = 'result' hcu._excelAddSheet(df3, excelWriter, to_sheet_name) print('写入成哦')
def get_equipment_factory_netcell(dir_path, to_dir_path): """ 所有设备对三个厂家,根据网元进行细分,写入到新的sheet中 :param to_dir_path: 处理完的数据要输入的目录 :param dir_path: 要处理文件所在的目录 :param file_name: 要处理的文件名 """ print('在设备-厂家表的基础上,再根据网元细分,得到每个厂家对应的网元.........') #获取文件夹下的所有文件 files_name = get_files(dir_path) for file_name in files_name: #1、按照网元分表 file_path = os.path.join(dir_path, file_name) # 读取源文件遍历sheet(厂家) df = pd.read_excel(file_path, sheet_name=None) # 获得表头,为后边添加表头使用 df_head = pd.read_excel(file_path, sheet_name=0) df_head_list = [df_head.columns.tolist()] # print('表头为\n', df_head_list) #得到所有的sheet sheets_name = list(df) # 遍历sheet,按照网元再分 df1 = pd.DataFrame() # print('所有的sheet',sheets_name)#['华为','中兴','爱立信'] for i in range(len(sheets_name)): # print(sheets_name[i]) #读入文件 df1 = pd.read_excel(file_path, sheet_name=sheets_name[i]) netcell_values = df1['网元名称'].values.tolist() unique_netcell = list(set(netcell_values)) # 得出所有网元名(不重复) #创建新的excel文件,为后续写文件做铺垫 # to_file_path = r'H:\pycharm_workspace\alarm_think\data\onenet_warning_data1\test2.xlsx' to_file_name = sheets_name[i] + file_name to_file_path = os.path.join(to_dir_path, to_file_name) pd.DataFrame().to_excel(to_file_path) #创建新excel文件 for j in range(len(unique_netcell)): unique_netcell_values = [] for k in range(len(netcell_values)): if unique_netcell[j] == netcell_values[k]: unique_netcell_values.append(df1.iloc[k]) #添加头标题 unique_netcell_values = df_head_list + unique_netcell_values df2 = pd.DataFrame(unique_netcell_values) #将某个设备-厂家-网元写入新的sheet excelWriter = pd.ExcelWriter(to_file_path, engine='openpyxl') to_sheet_name = file_name[2:-5] + sheets_name[ i] + unique_netcell[j] hcu._excelAddSheet(df2, excelWriter, to_sheet_name) print('%s网元数据抽出,并写入文件成功!!' % to_sheet_name) print('\033[32;1m%s %s厂家的网元数据抽出完毕!!\033[0m' % (file_name[0:-5], sheets_name[i])) #带颜色输出控制台 print('\033[33;1m' + '所有文件处理完毕,在设备-厂家表的基础上,再根据网元细分,得到每个厂家对应的网元!!' + '\033[0m')