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

如何仅修改文本文件中指定产品对应行的Price/Stock值?

问题描述

是否可以仅替换文本文件中特定行和列的特定单词?例如示例文本文件内容如下:

Product: Scissors, Price: $2, Stock: 50 
Product: Spoon, Price: $2, Stock: 35
Product: Spoon, Price: $2, Stock: 35
Product: Cheese, Price: $4, Stock: 100

需求是:输入目标产品名称,以及要修改的属性(Price或Stock),仅修改该产品对应行的对应属性值。目前使用的Python代码会全局匹配替换,无法实现精准修改,请问如何实现仅修改目标行的对应值?是否可以通过列表来修改单个特定单词?

当前代码如下:

f = open("C:/Users/--/OneDrive/Documents/python text files/Grocery.txt", "r+")
Search = input("What would you like to change: ")
Replace = input("What would you like to replace with: ")
data = f.read()
if Search in data:
    data = data.replace(Search, Replace)
    f.close()
    f = open("C:/Users/--/OneDrive/Documents/python text files/Grocery.txt", "r+")
    f.write(data)
    f.close()
    print("Information has been replaced!")
else:
    print("The information you searched for does not exists")
实现方案

要实现精准修改,核心思路是逐行处理文本,拆分每行的属性字段,定位到目标产品的目标属性后再修改,最后将所有行写回文件。以下是具体实现代码:

file_path = "C:/Users/--/OneDrive/Documents/python text files/Grocery.txt"

# 获取用户输入
target_product = input("请输入要修改的产品名称(如Scissors):").strip()
target_attr = input("请输入要修改的属性(Price/Stock):").strip()
new_value = input("请输入新的属性值(如$3或60):").strip()

# 读取所有行并处理
updated_lines = []
with open(file_path, "r") as f:
    for line in f:
        line = line.strip()
        if not line:
            updated_lines.append(line)
            continue
        # 拆分每行的属性,格式为"Key: Value"
        attrs = [item.strip() for item in line.split(",")]
        attr_dict = {}
        for attr in attrs:
            key, value = attr.split(": ", 1)
            attr_dict[key] = value
        
        # 判断当前行是否是目标产品
        if attr_dict.get("Product") == target_product:
            # 修改目标属性
            if target_attr in attr_dict:
                attr_dict[target_attr] = new_value
                # 重新拼接行内容
                updated_line = ", ".join([f"{k}: {v}" for k, v in attr_dict.items()])
                updated_lines.append(updated_line)
            else:
                # 属性不存在,保留原行
                updated_lines.append(line)
        else:
            # 非目标产品,保留原行
            updated_lines.append(line)

# 将修改后的内容写回文件
with open(file_path, "w") as f:
    f.write("\n".join(updated_lines))

print("修改完成!")

代码说明

  • 使用with语句处理文件,自动管理文件的打开和关闭,避免资源泄漏。
  • 逐行读取文本,将每行拆分为属性字典,方便定位和修改特定属性。
  • 仅当行内产品名称匹配时,才修改指定的属性值,其他行保持不变。
  • 最后将所有处理后的行统一写回文件,实现精准修改。

也可以通过列表操作实现:拆分每行成元素列表,遍历每个元素判断是否为目标属性,修改后重新拼接。这种方式和字典方法逻辑一致,但字典方式更直观易维护。

内容的提问来源于stack exchange,提问作者Paranoid Android

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:45:42