Ejemplo n.º 1
0
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)中!')
Ejemplo n.º 2
0
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。')
Ejemplo n.º 3
0
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所有设备已经按照厂家细分完毕!!')
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
    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('写入成哦')



Ejemplo n.º 6
0
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')