You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python匹配两个CSV文件数据并输出合并后的新CSV文件

CSV用户表与上级表关联合并实现方案

前置说明

默认两个文件的关联匹配字段为用户唯一IDuser_id,如果实际使用的关联字段为员工号、用户名等其他字段,直接修改代码中对应键名即可。
我们优先把管理人员表加载为字典结构,避免遍历用户表时重复扫描管理人员表,大幅提升匹配效率。

实现代码

不需要安装第三方依赖,直接用Python内置csv模块实现,完全符合逐行遍历用户表的要求:

import csv

# 配置项
USER_DETAILS_PATH = "user_details.csv"
USER_MANAGERS_PATH = "user_managers.csv"
OUTPUT_PATH = "user_details_managers.csv"
JOIN_KEY = "user_id"  # 两个表关联的主键,可根据实际修改

# 第一步:先加载管理人员表到字典,方便快速查询
manager_dict = {}
with open(USER_MANAGERS_PATH, 'r', encoding='utf-8', newline='') as f:
    reader = csv.DictReader(f)
    manager_fields = reader.fieldnames
    for row in reader:
        manager_dict[row[JOIN_KEY]] = row

# 第二步:逐行遍历用户基础信息表,匹配上级信息后输出
with open(USER_DETAILS_PATH, 'r', encoding='utf-8', newline='') as in_f, \
     open(OUTPUT_PATH, 'w', encoding='utf-8', newline='') as out_f:
    user_reader = csv.DictReader(in_f)
    # 输出字段 = 用户表所有字段 + 管理人员表所有字段(去掉重复的关联主键)
    output_fields = user_reader.fieldnames + [field for field in manager_fields if field != JOIN_KEY]
    writer = csv.DictWriter(out_f, fieldnames=output_fields)
    writer.writeheader()

    # 逐行处理用户记录
    for user_row in user_reader:
        user_id = user_row[JOIN_KEY]
        # 匹配上级信息,没有匹配到则留空
        manager_info = manager_dict.get(user_id, {})
        # 合并两个字典
        merged_row = {**user_row, **manager_info}
        # 写入输出文件
        writer.writerow(merged_row)

注意事项

  • 如果你的CSV文件使用的分隔符不是逗号,可在csv.DictReader和csv.DictWriter中新增delimiter参数指定分隔符,比如制表符就加delimiter='\t'
  • 编码如果不是utf-8,可修改encoding参数为对应编码(比如gbk)
  • 未匹配到上级的用户记录会保留全部基础信息,上级相关字段自动留空,不会丢失原有数据

内容的提问来源于stack exchange,提问作者Robert Karamagi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:39:02