5是全部正式代码,1-4为分步骤测试
1.创建DataFrame并测试
import os
import re
import pandas as pd
# 定义文件夹路径
folder_path = '.'
# 初始化一个空列表用于存储 Excel 文件路径
excel_files = []
# 使用 os.walk 函数递归遍历文件夹
for root, dirs, files in os.walk(folder_path):
# 遍历文件列表
for file in files:
# 检查文件名是否以".xlsx"或".xls"结尾
if file.endswith('.xlsx') and re.search(r'人员信息', file):
# 将文件的完整路径添加到列表中
excel_files.append(os.path.join(root, file))
# 测试找到的 Excel 文件路径
# for file_path in excel_files:
# print(file_path)
# 初始化一个空的 DataFrame 用于存储合并后的数据
merged_df = pd.DataFrame()
# 遍历文件夹中的 Excel 文件
for i, file_name in enumerate(excel_files, start=1):
# 将当前文件的数据追加到合并后的 DataFrame 中
if i == 1:
df = pd.read_excel(os.path.join(folder_path, file_name))
#可以自定义新的数据列加进df
# df['所在地'] = df.iloc[0,0]
# df['文件名'] = file_name
merged_df = pd.concat([merged_df, df.iloc[1:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
print(merged_df)
else:
df = pd.read_excel(os.path.join(folder_path, file_name))
merged_df = pd.concat([merged_df, df.iloc[2:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
print(merged_df)
2.DataFrame自定义加入新列
if i == 1:
df = pd.read_excel(os.path.join(folder_path, file_name))
#可以自定义新的数据列加进df
df['所在地'] = df.iloc[0,0]
df['文件名'] = file_name
merged_df = pd.concat([merged_df, df.iloc[1:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
print(merged_df)
3.DataFrame追加到excel文件中
# 初始化一个空的 DataFrame 用于存储合并后的数据
merged_df = pd.DataFrame()
# 遍历文件夹中的 Excel 文件
for i, file_name in enumerate(excel_files, start=1):
# 读取当前 Excel 文件的数据
# 将当前文件的数据追加到合并后的 DataFrame 中
if i == 1:
df = pd.read_excel(os.path.join(folder_path, file_name))
df['所在地'] = df.iloc[0,0]
df['文件名'] = file_name
merged_df = pd.concat([merged_df, df.iloc[1:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
merged_df.to_excel('人员_test.xlsx', index=False)
else:
df = pd.read_excel(os.path.join(folder_path, file_name))
df['所在地'] = df.iloc[0,0]
df['文件名'] = file_name
merged_df = pd.concat([merged_df, df.iloc[2:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
merged_df.to_excel('人员_test.xlsx', index=False)
4.捕获异常
# 初始化一个空的 DataFrame 用于存储合并后的数据
merged_df = pd.DataFrame()
# 遍历文件夹中的 Excel 文件
for i, file_name in enumerate(excel_files, start=1):
# 读取当前 Excel 文件的数据
try:
# 将当前文件的数据追加到合并后的 DataFrame 中
if i == 1:
df = pd.read_excel(os.path.join(folder_path, file_name))
df['所在地'] = df.iloc[0,0]
df['文件名'] = file_name
merged_df = pd.concat([merged_df, df.iloc[1:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
# print(merged_df)
merged_df.to_excel('人员.xlsx', index=False)
# merged_df.to_excel('人员.xlsx', index=False)
else:
df = pd.read_excel(os.path.join(folder_path, file_name))
df['所在地'] = df.iloc[0,0]
df['文件名'] = file_name
merged_df = pd.concat([merged_df, df.iloc[2:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
merged_df.to_excel('人员.xlsx', index=False)
except ValueError as e:
# 捕获 ValueError 异常
print("发生异常:", e,"文件名",file_name)
# 获取报异常的文件名
exception_file_name = file_name
5.整体代码结构
import os
import re
import pandas as pd
# 定义文件夹路径
folder_path = '.'
# 初始化一个空列表用于存储 Excel 文件路径
excel_files = []
# 使用 os.walk 函数递归遍历文件夹
for root, dirs, files in os.walk(folder_path):
# 遍历文件列表
for file in files:
# 检查文件名是否以".xlsx"或".xls"结尾
if file.endswith('.xlsx') and re.search(r'人员信息', file):
# 将文件的完整路径添加到列表中
excel_files.append(os.path.join(root, file))
# 初始化一个空的 DataFrame 用于存储合并后的数据
merged_df = pd.DataFrame()
# 遍历文件夹中的 Excel 文件
for i, file_name in enumerate(excel_files, start=1):
# 读取当前 Excel 文件的数据
try:
# 将当前文件的数据追加到合并后的 DataFrame 中
if i == 1:
df = pd.read_excel(os.path.join(folder_path, file_name))
df['所在地'] = df.iloc[0,0]
df['文件名'] = file_name
merged_df = pd.concat([merged_df, df.iloc[1:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
merged_df.to_excel('人员_final.xlsx', index=False)
else:
df = pd.read_excel(os.path.join(folder_path, file_name))
df['所在地'] = df.iloc[0,0]
df['文件名'] = file_name
merged_df = pd.concat([merged_df, df.iloc[2:]], axis=0)
print(f"合并了第{i}个文件: {file_name}")
merged_df.to_excel('人员_final.xlsx', index=False)
except ValueError as e:
# 捕获 ValueError 异常
print("发生异常:", e,"文件名",file_name)
# 获取报异常的文件名
exception_file_name = file_name
# 你可以在此处进行其他处理,例如记录异常信息或采取其他措施