You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何对比不同文件夹中的同名Excel文件,并用循环实现批量单元格差异提取?

批量对比两个文件夹中的同名Excel文件并提取差异

嘿,针对你的需求,我把你现有的单文件对比代码扩展成批量处理版本,顺便梳理下整体的实现思路:

核心思路拆解

  1. 先获取两个文件夹里的所有Excel文件名,筛选出两边都存在的同名文件(毕竟我们只需要对比文件名匹配的)
  2. 对每个同名文件循环执行你原本的差异提取逻辑
  3. 可选:把每个文件的差异结果保存下来,方便后续查看

完整的批量处理代码

基于你的代码扩展,用到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

火山引擎 最新活动