如何更新文件中已写入的商品购买记录的数量与价格数值
如何更新文件中的商品购买记录而不是新增
嘿,这个需求完全可以搞定!你当前的写法是直接往文件里输出新的记录,没有检查和修改已有内容,所以每次购买都会新增一行。要实现更新原有记录的效果,我们需要先读取文件内容,找到对应商品的条目后修改,再写回文件。
核心思路
- 读取现有记录:先把文件里的所有内容读出来,方便后续修改
- 检查并更新目标条目:遍历每条记录,找到香蕉的购买记录,计算新的数量和总价后替换原有内容
- 新增(如果没有记录):如果文件里还没有香蕉的记录,就直接添加一条新的
- 写回文件:把更新后的所有记录重新写入文件,覆盖原有内容
具体代码实现(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
相关产品推荐
相关产品推荐

