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

如何匹配双CSV文件ID,将指定字段追加至对应输出文件?

解决方案:匹配ID并追加Activity字段到输出文件

问题根源

你之前的嵌套循环失效的核心原因是:csv.reader返回的是一次性迭代器。第一次遍历sheetTwo后,迭代器指针走到末尾,后续循环再遍历sheetTwo不会返回任何数据,导致只有第一个rowOne可能匹配到结果,后续全失效。另外你的代码逻辑偏离需求——现在不需要再处理one.csv,而是要直接从已生成的file01.csv这类单记录文件中读取ID,去匹配two.csv。

正确思路

  1. 预存two.csv的ID与对应Activity字段到字典,实现O(1)快速查找。
  2. 遍历所有单记录输出文件,读取每个文件的ID,从字典取对应Activity并追加到文件末尾。

完整代码

import csv
import os

directory = '/home/user/work/'
# 1. 构建ID到Activity的映射字典
id_activity_map = {}
with open(os.path.join(directory, 'two.csv'), 'r') as two_file:
    sheetTwo = csv.reader(two_file, delimiter=',')
    # 跳过two.csv的标题行(没有标题则删除此行)
    next(sheetTwo)
    for row in sheetTwo:
        # ID在第3列(索引2),Activity在第5列(索引4)
        id_val = row[2].strip()
        activity = row[4].strip()
        id_activity_map[id_val] = activity

# 2. 遍历所有输出文件(匹配fileXX.csv格式)
for filename in os.listdir(directory):
    if filename.startswith('file') and filename.endswith('.csv'):
        file_path = os.path.join(directory, filename)
        # 读取文件首行的ID(去除换行符与空格)
        with open(file_path, 'r') as f:
            file_id = f.readline().strip()
        
        # 查找对应Activity并追加
        activity = id_activity_map.get(file_id)
        if activity:
            with open(file_path, 'a') as f:
                # 若原文件用分号分隔,可改为f.write(f';{activity}\n')保持格式一致
                f.write(f'{activity}\n')
                print(f'已为{filename}追加Activity: {activity}')
        else:
            print(f'未在two.csv中找到{filename}对应的ID: {file_id}')

关键说明

  • 用os.path.join拼接路径,避免跨系统路径分隔符问题。
  • 处理ID和Activity时加strip(),避免空格导致匹配失败。
  • 若输出文件首行是标题、第二行才是ID,把读取ID的代码改成next(csv.reader(f))[0].strip()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:22:58