合并子文件夹下全部excel如下所示
# -*- coding: utf-8 -*-
# @Time : 2023/6/9 11:04
# @Author : JDC
# @File : test.py
# @Software: PyCharm
# 读取一个文件夹下的全部子文件夹中的excel,如果子文件夹中的excel文件数量大于1,则将当前子文件夹下的全部excel合并为一个以子文件夹名命名的excel
# 下面的代码通过遍历文件夹及子文件夹中的所有excel文件,并判断每个子文件夹下的excel文件数量是否大于1,如果是,则执行合并操作。
# 合并操作包括读取所有excel文件到DataFrame中,并将它们通过`pd.concat()`函数合并为一个DataFrame,
# 最后将合并后的DataFrame写入以子文件夹名命名的excel文件中。注意,代码中使用了`os.sep`表示当前操作系统的路径分隔符。
import os
import glob
import pandas as pd
# 定义要读取的文件夹路径
folder_path = 'D:/example/test'
# 定义合并后的excel文件路径
merged_folder_path = 'D:/example/merge/'
if not os.path.exists(merged_folder_path):
print('存储路径不存在', end='')
os.mkdir(merged_folder_path)
print('已创建')
# 遍历文件夹及子文件夹中的所有excel文件
for root, dirs, files in os.walk(folder_path):
# 获取当前子文件夹路径
current_folder_path = os.path.abspath(root)
# 获取当前子文件夹下的所有excel文件(使用glob模块搜索满足条件的文件)
excel_files = glob.glob(os.path.join(current_folder_path, '*.xls*'))
# 如果当前子文件夹下的excel文件数量大于1,则执行合并操作
if len(excel_files) > 1:
# 定义合并后的excel文件名为子文件夹名
merged_excel_file_name = current_folder_path.split(os.sep)[-1] + '.xlsx'
# merged_excel_file_path = os.path.join(current_folder_path, merged_excel_file_name)
# 指定输出文件路径
merged_excel_file_path = os.path.join(merged_folder_path, merged_excel_file_name)
# 合并当前子文件夹下的所有excel文件到一个DataFrame中
df_list = []
for excel_file in excel_files:
df = pd.read_excel(excel_file)
df_list.append(df)
merged_df = pd.concat(df_list, ignore_index=True)
# 将合并后的DataFrame写入excel文件
merged_df.to_excel(merged_excel_file_path, index=False)
print('合并了文件夹 {} 下的 {} 个Excel文件为一个文件:{}'.format(current_folder_path, len(excel_files), merged_excel_file_path))