如何对比不同文件夹中的同名Excel文件,并用循环实现批量单元格差异提取?
批量对比两个文件夹中的同名Excel文件并提取差异
嘿,针对你的需求,我把你现有的单文件对比代码扩展成批量处理版本,顺便梳理下整体的实现思路:
核心思路拆解
- 先获取两个文件夹里的所有Excel文件名,筛选出两边都存在的同名文件(毕竟我们只需要对比文件名匹配的)
- 对每个同名文件循环执行你原本的差异提取逻辑
- 可选:把每个文件的差异结果保存下来,方便后续查看
完整的批量处理代码
基于你的代码扩展,用到os模块来遍历和处理文件路径:
import pandas as pd import os # 替换成你的两个文件夹路径 folder1 = 'firstfolder' folder2 = 'secondfolder' # 获取文件夹中的Excel文件(支持.xls和.xlsx,可根据实际调整) def get_excel_files(folder_path): return [f for f in os.listdir(folder_path) if f.lower().endswith(('.xls', '.xlsx'))] files1 = get_excel_files(folder1) files2 = get_excel_files(folder2) # 找出两边都存在的同名文件 common_files = set(files1) & set(files2) if not common_files: print("没有找到同名的Excel文件!") else: # 创建保存差异结果的文件夹(不存在则自动创建) os.makedirs('diff_results', exist_ok=True) for filename in common_files: print(f"\n=== 正在处理文件: {filename} ===") # 构造完整文件路径 path1 = os.path.join(folder1, filename) path2 = os.path.join(folder2, filename) try: # 读取Excel文件(默认读第一个工作表,多工作表的话看下面的注意事项) df1 = pd.read_excel(path1) df2 = pd.read_excel(path2) # 先检查列结构是否一致,避免报错 if list(df1.columns) != list(df2.columns): print(f"⚠️ 文件{filename}的列结构不一致,跳过对比") continue # 提取差异:只保留有不同值的单元格,空值表示无差异 difference = df1[df1 != df2] # 移除全为空值的行(这些行没有任何差异) difference = difference.dropna(how='all') if difference.empty: print(f"✅ 文件{filename}没有差异") else: print(f"🔍 文件{filename}的差异内容:") print(difference) # 保存差异结果到新文件 difference.to_excel(f'diff_results/{filename}_diff.xlsx', index=False) print(f"💾 差异结果已保存到 diff_results/{filename}_diff.xlsx") except Exception as e: print(f"❌ 处理文件{filename}时出错: {str(e)}")
实用注意事项
- 多工作表处理:如果你的Excel文件包含多个工作表,把
pd.read_excel改成pd.read_excel(path1, sheet_name=None),这样会返回一个{工作表名: DataFrame}的字典,然后嵌套循环处理每个工作表即可。 - 数据类型差异:如果两个文件中同一单元格的数据类型不同(比如一个是数字一个是文本),
df1 != df2会判定为差异,要是不需要这种情况,可以先统一数据类型再对比。 - 大文件优化:如果文件很大,建议用
chunksize参数分块读取,避免内存不足。
内容的提问来源于stack exchange,提问作者user6882757




