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

如何编辑CSV文件的指定值?Python匹配UUID扣减CSV轮胎数量

现有代码核心问题
  • 文件打开模式错误:使用a(追加)模式打开CSV时,文件指针默认在末尾,既读不到原有内容,也无法修改已有行,只能在文件最后加新内容
  • 未实现核心业务逻辑:仅做了UUID匹配打印,没有实现「匹配指定TYRE SIZE、扣减对应QUANTITY」的功能
  • 没有数据安全逻辑:直接读写原文件如果中途报错,会直接损坏原始CSV数据
  • 缺少边界校验:没有判断库存是否足够,容易扣出负数库存
实现逻辑说明
  • 用csv.DictReader按表头读数据,不用硬编码列索引,后续CSV列顺序调整也不影响代码运行
  • 读写分离:先把原文件内容逐行处理后写入临时文件,处理完成后再用临时文件替换原文件,避免损坏原始数据
  • 扣减前做库存校验,库存不足时给出提示、不执行扣减
  • 保留原有UUID生成、二维码导出逻辑,和库存扣减逻辑解耦
修正后可直接运行的代码
import uuid
import pyqrcode
import csv
import os

# 原有UUID、二维码生成逻辑
generate_uuid = str(uuid.uuid1())
print(f"生成的新UUID: {generate_uuid}")
qr_code = pyqrcode.create(generate_uuid)
qr_code.png(f'myqr{generate_uuid}.png', scale=6)

# 配置业务参数
target_size = input("请输入要扣减库存的TYRE SIZE: ")
deduct_num = int(input("请输入要扣减的库存数量: "))

temp_csv_path = 'temp_data.csv'

# 读原文件、写临时文件
with open('data.csv', 'r', encoding='utf-8') as origin_file, \
     open(temp_csv_path, 'w', encoding='utf-8', newline='') as temp_file:
    reader = csv.DictReader(origin_file)
    writer = csv.DictWriter(temp_file, fieldnames=reader.fieldnames)
    writer.writeheader()

    for row in reader:
        # 匹配目标轮胎尺寸
        if row['TYRE SIZE'].strip() == target_size.strip():
            current_stock = int(row['QUANTITY'])
            # 库存不足校验
            if current_stock < deduct_num:
                print(f"扣减失败:{target_size}当前库存为{current_stock},不足扣减{deduct_num}")
            else:
                row['QUANTITY'] = str(current_stock - deduct_num)
                print(f"扣减成功:{target_size}剩余库存为{row['QUANTITY']}")
        writer.writerow(row)

# 临时文件替换原文件,完成修改
os.replace(temp_csv_path, 'data.csv')
使用注意事项
  • 运行代码前请关闭打开状态的data.csv(尤其是用Excel打开时会锁文件,导致写入失败)
  • 如果你的CSV文件是GBK编码,把两处open()里的encoding='utf-8'改成encoding='gbk'即可
  • 如果需要切换匹配维度(比如按UUID匹配而非TYRE SIZE),只需要把判断条件里的row['TYRE SIZE']换成row['UUID']即可
  • 如果需要新增轮胎条目,在遍历完所有行之后用writer.writerow()写入新的字典数据即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:15:39