Datacompy库如何将比对报告字符串保存为Excel文件
Datacompy比对结果导出.xlsx实现方案
Datacompy没有内置直接导出Excel的方法,你可以将比对生成的各类结构化结果整理后,通过pandas的ExcelWriter写入.xlsx文件,按不同sheet分类存储可读性更好。
前置依赖
先安装Excel写入所需的依赖包:pip install openpyxl pandas datacompy
完整实现步骤
- 先按常规流程完成两个DataFrame的Datacompy比对
- 初始化Excel写对象,将不同维度的比对结果分别写入对应工作表
- 写完后自动释放文件句柄,生成最终的xlsx文件
import pandas as pd import datacompy # 替换为你自己的待比对数据源 df_left = pd.read_excel("待比对表1.xlsx") df_right = pd.read_excel("待比对表2.xlsx") # 初始化比对对象,join_columns替换为两个表关联用的主键列,支持多主键 compare = datacompy.Compare( df_left, df_right, join_columns=["主键ID"], df1_name="源表1", df2_name="源表2" ) # 写入多sheet的Excel结果文件 with pd.ExcelWriter("Datacompy数据比对结果.xlsx", engine="openpyxl") as writer: # 写入核心比对汇总指标 summary_data = [ ["源表1总行数", compare.df1_shape[0]], ["源表2总行数", compare.df2_shape[0]], ["两表关联匹配行数", compare.intersect_rows], ["仅源表1存在的行数", compare.df1_unq_rows.shape[0]], ["仅源表2存在的行数", compare.df2_unq_rows.shape[0]], ["存在值差异的列数", len([col for col in compare.column_stats if not col["all_match"]])] ] pd.DataFrame(summary_data, columns=["统计项", "数值"]).to_excel(writer, sheet_name="比对汇总", index=False) # 写入单表独有行 compare.df1_unq_rows.to_excel(writer, sheet_name="仅源表1存在的行", index=False) compare.df2_unq_rows.to_excel(writer, sheet_name="仅源表2存在的行", index=False) # 写入列维度比对详情(含列类型、列匹配率、是否全量匹配等信息) pd.DataFrame(compare.column_stats).to_excel(writer, sheet_name="列级比对详情", index=False) # 写入匹配行的全量比对结果(含每个字段的两边值、是否匹配标记) compare.all_mismatch().to_excel(writer, sheet_name="匹配行值差异明细", index=False) # 可选:写入Datacompy原生的文本版报告 report_text = compare.report() pd.DataFrame({"文本报告行内容": report_text.split("\n")}).to_excel(writer, sheet_name="原生文本报告", index=False)
注意事项
- 如果待比对数据量超过100万行,建议导出差显明细时增加过滤条件,避免生成的Excel文件过大无法打开
- 如果写入时遇到权限报错,先检查目标xlsx文件是否被其他程序(比如WPS、Excel)占用,关闭后再执行
- 多主键关联时,
join_columns参数传入包含所有主键列名的列表即可,比如join_columns=["订单ID", "统计日期"]
内容的提问来源于stack exchange,提问作者Shivraj Navade
相关产品推荐
相关产品推荐

