搜罗出给定路径下的所有文件
- 这里使用了递归遍历
- 还需要注意剔除不是表格的文件
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)