如何用Python对比两个CSV文件并生成自定义格式差异输出?
Python对比两个CSV文件并输出自定义差异格式
实现思路
- 用
csv.DictReader读取CSV文件,将每行数据转为字典,方便按字段名直接访问 - 以
Id作为唯一匹配键,把两个CSV的数据分别存入字典,实现通过Id快速定位对应行 - 遍历第一个CSV的所有Id,对比第二个CSV中同Id行的每个字段值
- 对字段值不同的情况,按照指定格式生成差异文本
- 将所有差异文本写入输出文件
代码示例
import csv def compare_csv(csv1_path, csv2_path, output_path): # 读取第一个CSV,构建Id到行数据的映射 csv1_data = {} with open(csv1_path, 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: csv1_data[row['Id']] = row # 读取第二个CSV,构建同样的映射 csv2_data = {} with open(csv2_path, 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: csv2_data[row['Id']] = row differences = [] # 遍历第一个CSV的所有条目,对比第二个CSV的对应内容 for id_val, row1 in csv1_data.items(): if id_val not in csv2_data: differences.append(f"Id {id_val} does not exist in CSV 2") continue row2 = csv2_data[id_val] # 逐个字段对比(跳过Id字段) for field in row1.keys(): if field == 'Id': continue val1, val2 = row1[field], row2[field] if val1 != val2: # 完全匹配示例格式的写法 if field == 'Date': differences.append(f"Id {id_val} {field} changed is to {val2}") else: differences.append(f"Id {id_val} {field} is changed to {val2}") # 将差异写入输出文件 with open(output_path, 'w', encoding='utf-8') as f: for line in differences: f.write(line + '\n') # 调用示例 if __name__ == "__main__": compare_csv('csv1.csv', 'csv2.csv', 'differences.txt')
补充说明
- 代码依赖Python标准库
csv,无需额外安装第三方包 - 假设两个CSV的字段名完全一致,且
Id字段为唯一标识 - 如果需要处理第二个CSV存在但第一个CSV缺失的Id,可以添加遍历
csv2_data的逻辑补充对比
内容的提问来源于stack exchange,提问作者Abilaash
相关产品推荐
相关产品推荐

