python 合并表格

搜罗出给定路径下的所有文件

  • 这里使用了递归遍历
  • 还需要注意剔除不是表格的文件
def get_file_path(file_list, path):
    try:
        if len(file_list) == 0:
            # 获取文件夹下是所有文件夹
            file_list = os.listdir(path)
        if len(file_list) > 0:
            for folder in file_list:
                if '.' in folder:
                    str_list = folder.split('.')
                    if str_list[len(str_list) - 1] in ['xlsx', 'xls']:
                        # 将表格存入数组
                        file_path = path + "\\" + folder
                        file_path_list.append(file_path)
                else:
                    # 深入下一层文件夹
                    folder_path = path + "\\" + folder
                    # 获取该文件夹下的所有内容(表格及文件夹)
                    file_list_one = os.listdir(folder_path)
                    if len(file_list) > 0:
                        # 递归调用,筛选出表格
                        get_file_path(file_list_one, folder_path)
                    else:
                        return
    except Exception as e:
        print("搜罗出现错误,错误原因如下: ", e)
        return
    print("表格搜罗完成")

合并表格内容

  • 这里需要将表头不一致的表格进行分类
def merge_excel(path_list, file_path):
    if len(path_list) > 0:
        df_list = []
        title_list = []
        try:
            for path in path_list:
                # 根据表格路径读取表格内容
                df = pd.read_excel(path)
                # 获取表头
                titles = df.columns.values
                if len(title_list) == 0:
                    df_son_list = [df]
                    df_list.append(df_son_list)
                    title_list.append(titles)
                else:
                    is_same = False
                    # 遍历表头数组,根据表头对表格进行分类
                    for index in range(len(title_list)):
                        title_name_list = title_list[index]
                        if len(title_name_list) == len(titles):
                            for i in range(len(title_name_list)):
                                # 表头不一致
                                if title_name_list[i] != titles[i]:
                                    # 出现表头不一致的,就跳出循环,继续检查下一个
                                    is_same = False
                                    break
                                else:
                                    is_same = True
                            if is_same:
                                # 将表格数据存入与其表头相同的表格数组
                                df_list[index].append(df)
                                break
                    if not is_same:
                        # 表头不同的表格, 往末尾添加
                        df_son_list = [df]
                        df_list.append(df_son_list)
                        title_list.append(titles)
        except Exception as e:
            print("表格分类出错错误,错误原因如下: ", e)
            print("错误路径如下: ", path)
        try:
            if len(df_list) > 0:
                print("文件分类完成, 共有{}类, 开始合并: ".format(df_list.__len__()))
                for index in range(len(df_list)):
                    df_list_son = df_list[index]
                    # 将读取的内容合并
                    merge_df = pd.concat(df_list_son, axis=0)
                    # 设置合并后文件的存储路径
                    new_file_path = file_path + "-合并后\\" + str(index) + "-合并表格.xlsx"
                    # 生成表格
                    merge_df.to_excel(new_file_path, index=0)
        except Exception as e:
            print("表格合并出错,错误原因如下: ", e)
        print("大功告成")

调用上面的函数

file_path_list = []
# 存放文件的路径,这种是绝对路径,可以自己根据需要修改为任意磁盘的任意位置
# one_path = 'E:\\01-Python\\ManualPractis\\File\\2022-05-24'
# 存放表格的相对路径,一般只能放在项目当中
one_path = '../File/2022-05-24'
get_file_path([], one_path)
merge_excel(file_path_list, one_path)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值