如何基于SKU匹配实现跨CSV文件的列值更新?
如何基于SKU匹配实现跨CSV文件的列值更新?
看起来你已经迈出了第一步,成功读取了两个CSV文件,但在SKU匹配和库存更新的逻辑上有点卡壳了。我来帮你梳理下思路,把代码理顺~
先明确你的核心需求:
- 从第一个CSV(
read.csv)提取SKU(比如kh10这类标识)和对应的库存值 - 遍历第二个CSV(
import.csv),找到匹配的SKU,将它的库存列替换为第一个CSV里的对应值 - 最终保存更新后的结果
先结合你的示例文件,明确下两个文件的列结构(注意Python索引从0开始):
第一个文件(read.csv,数据源):
,,kh10,,,,0
,,kh12,,,,21
,,kh13,,,,1
,,kh11,,,,45
,,kh20,,,,26
SKU在第3列(索引2),库存值在最后一列(索引7)
第二个文件(import.csv,待更新):
,kh20,,,0
,kh16,,,47
,kh12,,,31
,kh10,,,2
,kh13,,,0
SKU在第2列(索引1),库存值在最后一列(索引4)
优化后的代码及解释
import csv # 第一步:把第一个CSV的SKU和对应库存做成字典,实现高效查找 sku_inventory_map = {} with open("C:\\Users\\Owner\\OneDrive\\Desktop\\Test\\read.csv", 'r') as file: reader = csv.reader(file) for row in reader: # 跳过空行或不完整的行,避免索引报错 if len(row) >= 8: sku = row[2] # 对应第一个文件的SKU列索引 inventory = row[7] # 对应第一个文件的库存列索引 sku_inventory_map[sku] = inventory # 第二步:遍历第二个CSV,匹配SKU并更新库存 updated_rows = [] with open("C:\\Users\\Owner\\OneDrive\\Desktop\\Test\\import.csv", 'r') as file: reader = csv.reader(file) for row in reader: if len(row) >= 5: current_sku = row[1] # 对应第二个文件的SKU列索引 # 如果当前SKU在字典里存在,就替换库存值 if current_sku in sku_inventory_map: row[4] = sku_inventory_map[current_sku] updated_rows.append(row) # 第三步:将更新后的内容写入新文件(建议写新文件,避免覆盖原数据) with open("C:\\Users\\Owner\\OneDrive\\Desktop\\Test\\updated_import.csv", 'w', newline='') as file: writer = csv.writer(file) writer.writerows(updated_rows) print("更新完成!已保存为updated_import.csv")
关键改进点说明
- 用字典存储SKU映射:比起你之前的嵌套循环,字典的查找效率是O(1),不仅更快,逻辑也更清晰
- 明确列索引:你之前的代码里列索引设置有误,这里根据你的示例文件做了修正,如果实际文件列位置不同,记得调整对应的索引值
- 增加容错判断:加入了行长度检查,避免CSV里有空行或不完整行时出现索引越界报错
- 保留原文件安全:将更新后的内容写入新文件,不会覆盖原始的
import.csv,更稳妥
备注:内容来源于stack exchange,提问作者nealgoogs
相关产品推荐
相关产品推荐

