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

Python实现两个CSV文件匹配SKU并补充对应颜色数据问题

解决CSV文件按SKU补充颜色数据的问题

嘿,很高兴看到你在Python学习上的进步!咱们来一步步拆解你遇到的问题,找到更高效的解决方案~

你的代码核心问题:迭代器只能遍历一次

你最初的代码里,csv.reader返回的是迭代器对象——简单说就是,一旦你把它从头到尾遍历完一遍(比如第一个f1行的循环里,你把f2_reader的所有内容都读完了),后面再去循环它,就没有任何内容可以输出了。这就是为什么你的代码只处理了f1的第一行,后面的行根本没法再和f2的数据匹配。

你后来把打开f2的代码放到f1的循环里,每次处理一行f1就重新读一遍f2,确实能解决迭代器耗尽的问题,但这种方法效率很低——如果f1有几百上千行,就要重复打开读取几百次f2,完全没必要。

更优的解决方案:用字典预存颜色映射

我们可以先把File2.csv里的SKU和对应颜色存成一个字典,这样遍历File1.csv的时候,直接通过SKU查字典就能拿到颜色,不用反复读取File2。下面是完整的可运行代码:

import csv

# 第一步:预加载File2的SKU-颜色映射到字典
color_map = {}
with open('File2.csv', 'r', encoding='UTF-8') as f2:
    f2_reader = csv.reader(f2, delimiter=';')
    next(f2_reader)  # 跳过表头行
    for line in f2_reader:
        # 处理可能的空行或数据不完整的情况
        if len(line) >= 2:
            sku = line[0].strip()  # 去除SKU前后可能的空格
            color = line[1].strip()
            color_map[sku] = color

# 第二步:处理File1,补充颜色并生成输出文件
with open('File1.csv', 'r', encoding='UTF-8') as f1, open('output1.csv', 'w', newline='', encoding='UTF-8') as output_file:
    f1_reader = csv.reader(f1, delimiter=';')
    output_writer = csv.writer(output_file, delimiter=';')
    
    # 处理表头:添加color列
    header = next(f1_reader)
    header.append('color')
    output_writer.writerow(header)
    
    # 遍历File1的每一行,补充颜色
    for row in f1_reader:
        if len(row) >= 2:
            sku = row[0].strip()
            # 查找颜色,找不到就用空字符串
            matched_color = color_map.get(sku, '')
            row.append(matched_color)
            output_writer.writerow(row)

代码说明

  • 字典预存:只需要读取一次File2,把SKU和颜色的对应关系存在字典里,后续查找颜色的速度极快(O(1)时间复杂度)。
  • with语句:自动管理文件的打开和关闭,避免忘记关闭文件导致的资源泄漏。
  • 异常防护:通过len(line) >= 2判断,避免遇到空行或数据不全的行时抛出IndexError。
  • 直接生成目标文件:不需要手动复制数据,代码直接生成你需要的output1.csv,格式完全符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:18:31