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

如何更新文件中已写入的商品购买记录的数量与价格数值

如何更新文件中的商品购买记录而不是新增

嘿,这个需求完全可以搞定!你当前的写法是直接往文件里输出新的记录,没有检查和修改已有内容,所以每次购买都会新增一行。要实现更新原有记录的效果,我们需要先读取文件内容,找到对应商品的条目后修改,再写回文件。

核心思路

  1. 读取现有记录:先把文件里的所有内容读出来,方便后续修改
  2. 检查并更新目标条目:遍历每条记录,找到香蕉的购买记录,计算新的数量和总价后替换原有内容
  3. 新增(如果没有记录):如果文件里还没有香蕉的记录,就直接添加一条新的
  4. 写回文件:把更新后的所有记录重新写入文件,覆盖原有内容

具体代码实现(Python)

这里给出一个完整的函数,你可以直接复用:

def update_purchase_record(item_name, new_quantity, price_per_item):
    filename = "test.txt"
    records = []
    item_found = False

    # 读取文件中的现有记录(处理文件不存在的情况)
    try:
        with open(filename, 'r') as f:
            records = f.readlines()
    except FileNotFoundError:
        # 文件还没创建,直接准备新增记录
        pass

    # 遍历记录,寻找并更新目标商品
    for i in range(len(records)):
        line = records[i].strip()
        # 不区分大小写匹配商品名,避免大小写问题
        if item_name.lower() in line.lower():
            # 解析现有数量和总价(用正则表达式更健壮)
            import re
            pattern = re.compile(r"You have purchased (\d+) \w+ for price of (\d+)")
            match = pattern.match(line)
            if match:
                current_quantity = int(match.group(1))
                current_price = int(match.group(2))
                
                # 计算新的总数量和总价
                new_total_qty = current_quantity + new_quantity
                new_total_price = current_price + (new_quantity * price_per_item)
                
                # 替换原有记录行
                records[i] = f"You have purchased {new_total_qty} {item_name.lower()} for price of {new_total_price}\n"
                item_found = True
                break

    # 如果没找到目标商品记录,新增一条
    if not item_found:
        total_price = new_quantity * price_per_item
        new_line = f"You have purchased {new_quantity} {item_name.lower()} for price of {total_price}\n"
        records.append(new_line)

    # 将更新后的记录写回文件
    with open(filename, 'w') as f:
        f.writelines(records)

# 使用示例
# 第一次购买2根香蕉,单价100
update_purchase_record("bananas", 2, 100)
# 后续再购买3根香蕉
update_purchase_record("bananas", 3, 100)

关键细节说明

  • 文件异常处理:用try-except捕获FileNotFoundError,确保第一次运行时文件不存在也不会报错
  • 正则解析:相比直接用split()分割字符串,正则表达式能更好地适配格式小变化(比如商品名大小写、空格调整),让代码更健壮
  • 覆盖写入:最后用'w'模式打开文件,将更新后的所有记录一次性写入,确保文件里只有最新的记录状态

如果你的文件里还有其他商品的记录,这个函数也只会修改香蕉的条目,不会影响其他内容哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:30:38