Python如何替换txt文件中已有数据并保存修改内容
药品txt编辑功能修复方案
现有代码存在的核心问题
- 读取文件时将每行按逗号拆分为了列表结构,但后续直接对列表对象调用字符串专属的
replace()方法,运行时会直接抛出AttributeError,内存替换逻辑本身就无法正常执行 - 所有替换操作仅在程序运行的内存中完成,没有执行文件写回步骤,程序退出后修改会直接丢失
- 没有匹配校验逻辑,无论用户输入的待修改内容是否存在,都会执行全量遍历,操作无反馈
- 打开文件未指定编码,跨系统运行容易出现乱码问题
可直接运行的修复后代码
def admin_edit_medic(): medicine_lines = [] # 读取文件原始行内容,跳过空行 with open("medic.txt", "r", encoding="utf-8") as med_file: for line in med_file: stripped_line = line.strip() if stripped_line: medicine_lines.append(stripped_line) print("当前存储的药品信息:") for line in medicine_lines: print(line) print("\n") old_content = input("输入要修改的原有内容:") new_content = input("输入替换后的新内容:") updated_lines = [] match_total = 0 for line in medicine_lines: if old_content in line: match_total += 1 updated_lines.append(line.replace(old_content, new_content)) # 把修改后的内容写回文件,覆盖原有内容完成持久化 with open("medic.txt", "w", encoding="utf-8") as med_file: for line in updated_lines: med_file.write(f"{line}\n") print(f"\n操作完成,共匹配修改{match_total}条记录") print("修改后的药品信息:") for line in updated_lines: print(line) if __name__ == "__main__": admin_edit_medic()
关键逻辑说明
- 读取阶段不再提前拆分每行内容,直接保留原始字符串格式,从根源上避免列表调用字符串方法的报错
- 写入阶段使用
w(覆盖写)模式打开源文件,将内存中修改完成的所有行逐行写回,实现修改永久保存到txt文件 - 新增匹配计数,执行操作后明确告知用户修改了多少条记录,如果输入的待修改内容不存在,会提示0条匹配,方便排查输入错误
- 统一指定
utf-8编码打开文件,避免Windows系统下默认gbk编码导致的乱码问题 - 自动过滤文件中的空行,避免无效内容干扰替换逻辑
内容的提问来源于stack exchange,提问作者Kurumi3
相关产品推荐
相关产品推荐

