如何仅修改文本文件中指定产品对应行的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
相关产品推荐
相关产品推荐

