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

Python读取input.csv匹配reference.csv填充Group列至output.csv问题

问题排查:CSV文件根据Type匹配填充Group列失败

两个CSV文件说明

input.csv(动态更新的工作文件)

NameTypeOwnerStatusDateGroup
bananasfruitJoeIn Stock1/1/23
applesfruitjimOut Of Stock1/2/23
tomatoveggiebobIn Stock1/3/23
potatovegietomOut Of Stock1/4/23
kiwifruitjaneIn Stock1/5/23
chickenmeatfrancisOut Of Stock1/6/23
beefmeatlindaIn Stock1/7/23

reference.csv(静态参考文件)

TypeGroup
fruit1
veggie2
meat3

问题现象

编写的Python代码仅将input.csv内容复制到output.csv,未完成Group列的填充,推测问题出在if语句或writer.writerow的调用位置。

原代码

with open("input.csv", "r") as csv_input, open("reference.csv", "r")as assign_csv, open("output.csv", "w") as out_file:
reader = csv.reader(csv_input)
reader2 = csv.reader(assign_csv)
writer = csv.writer(out_file)

for error in reader:
    writer.writerow(error)
    for group in reader2:
        if group[0] in error[1]:
            error[5] = group[1]
            writer.writerow(error)

问题原因

  1. reader对象只能遍历一次:reference.csv对应的reader2在第一次遍历后就会耗尽,后续input行无法再读取参考数据
  2. 提前写入未填充行:在匹配Group值之前就把原始行写入了output.csv,导致最终文件既有未填充的原始行,又可能出现重复的填充行
  3. 匹配逻辑不准确:group[0] in error[1]是包含匹配,应该用精确相等group[0] == error[1],避免误匹配(比如"fruitty"会被错误匹配到"fruit")
  4. 未处理表头:代码没有跳过表头,会把表头行也参与匹配逻辑,导致错误

修正后的代码

import csv

# 先加载reference.csv的Type-Group映射到字典,实现快速查找
type_group_map = {}
with open("reference.csv", "r") as assign_csv:
    ref_reader = csv.reader(assign_csv)
    next(ref_reader)  # 跳过参考文件的表头
    for row in ref_reader:
        type_group_map[row[0]] = row[1]

# 处理input.csv并生成填充后的output.csv
with open("input.csv", "r") as csv_input, open("output.csv", "w", newline="") as out_file:
    input_reader = csv.reader(csv_input)
    output_writer = csv.writer(out_file)
    
    # 写入input文件的表头
    header = next(input_reader)
    output_writer.writerow(header)
    
    for row in input_reader:
        item_type = row[1]
        # 从字典获取对应Group,无匹配则保留空值
        row[5] = type_group_map.get(item_type, "")
        output_writer.writerow(row)

额外提示

  • input.csv中potato的Type拼写为vegie,与reference.csv中的veggie不一致,会导致该行无法匹配到Group值,需要手动修正拼写,或者在代码中添加容错处理(如忽略大小写、模糊匹配)
  • 使用字典存储映射关系,比嵌套循环的效率更高,尤其适合参考数据量较大的场景

内容的提问来源于stack exchange,提问作者Happy.Hartman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:15:55