如何对比两个CSV文件列值并生成差异结果CSV文件?
对比两个CSV文件并生成差异文件的可行方案
嘿,我明白你需要提取两个CSV文件的列值差异并生成新文件的需求,这在数据校验、版本跟踪场景里特别常见。下面给你两种实用的方案,你可以根据自己的技术偏好选择:
方案一:用Python Pandas实现灵活对比
如果熟悉Python,Pandas是个非常灵活的工具,能自定义处理各种差异场景:
- 先安装Pandas(如果还没装):
pip install pandas
- 编写对比脚本,假设你有一个唯一标识列(比如
id)用来匹配两行是否为同一记录:
import pandas as pd # 加载两个CSV文件 df_old = pd.read_csv('CSVFile1.csv') df_new = pd.read_csv('CSVFile2.csv') # 以唯一标识列合并,标记每行的来源 merged_df = pd.merge( df_old, df_new, on='id', how='outer', suffixes=('_old', '_new'), indicator=True ) # 筛选出新增、删除的行 added_or_removed = merged_df[merged_df['_merge'] != 'both'] # 筛选出列值有修改的行 modified_rows = merged_df[merged_df['_merge'] == 'both'].copy() # 遍历所有列,找出值不同的记录 for col in df_old.columns: if col != 'id': modified_rows = modified_rows[modified_rows[f'{col}_old'] != modified_rows[f'{col}_new']] # 合并所有差异行并去重 final_diff = pd.concat([added_or_removed, modified_rows]).drop_duplicates(subset='id') # 保存差异结果到新CSV final_diff.to_csv('CSV_Differences.csv', index=False)
注意点:
- 如果没有唯一标识列,你可以尝试用所有列做匹配,但这种方式容易误判,建议尽量确定一个唯一键。
- 处理空值时,可以在加载文件时用
fillna填充默认值,避免因NaN导致的不匹配。
方案二:用命令行工具csv-diff快速完成对比
如果不想写代码,csv-diff是个轻量的命令行工具,能直接输出结构化差异:
- 安装工具:
pip install csv-diff
- 运行对比命令,指定唯一标识列(比如
id):
csv-diff CSVFile1.csv CSVFile2.csv --key id > CSV_Differences.csv
这个命令会直接生成包含新增、删除、修改记录的差异文件,输出格式清晰,适合快速校验。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

