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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:09:27