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

如何用Python仅修改.txt文件中Start与ERROR间的Edit内容

解决仅修改Start与ERROR间Edit为Edited的Python代码问题

问题背景

原始文本内容:

Start
Edit
Edit
Edit
ERROR
Edit
Edit
Edit
Start
Edit
Edit
Edit

需求:仅将Start与ERROR之间的Edit替换为Edited,ERROR之后到下一个Start之前的Edit保持不变,最终目标输出:

Start
Edited
Edited
Edited
ERROR
Edit
Edit
Edit
Start
Edited
Edited
Edited

当前代码运行后输出异常,得到错误内容:

Edited
Edited
Edited
Edited
Edited
Editedit
Start
Edit
Edit
Edit

原代码问题分析

  1. 变量未初始化:editor变量在首次遇到非Start/ERROR的行时会未定义,存在报错风险
  2. 行处理逻辑错误:仅收集了需要替换的行,没有保留所有原始行,导致输出内容缺失且重复
  3. 文件写入模式错误:使用r+模式写入时,未清空原文件内容,仅写入替换后的行,导致新旧内容混杂
  4. 替换变量作用域问题:src和target在循环外引用,只会使用最后一组替换值,且替换逻辑未覆盖所有行

修正后的代码

import os

source = 'C:\\records'
replacements = {'Edit': 'Edited'}

for fname in os.listdir(source):
    name, ext = os.path.splitext(fname)
    if ext.lower() in ('.txt', '.TXT'):
        file_path = os.path.join(source, fname)
        processed_lines = []
        allow_edit = False  # 初始化替换状态:默认不允许替换
        
        # 读取文件并逐行处理
        with open(file_path, 'r', encoding='utf-8') as f:
            for line in f:
                stripped_line = line.strip()
                if stripped_line == "Start":
                    allow_edit = True
                    processed_lines.append(line)
                elif stripped_line == "ERROR":
                    allow_edit = False
                    processed_lines.append(line)
                else:
                    if allow_edit and stripped_line == "Edit":
                        processed_lines.append(line.replace("Edit", "Edited"))
                    else:
                        processed_lines.append(line)
        
        # 写入处理后的内容到原文件
        with open(file_path, 'w', encoding='utf-8') as f:
            f.writelines(processed_lines)
        
        # 输出可编辑行信息(可选)
        print(f"处理文件: {fname}")
        line_num = 0
        for line in processed_lines:
            line_num +=1
            if line.strip() == "Edited":
                print(f"At line {line_num} Found an editable line")

代码说明

  1. 状态管理:用allow_edit布尔变量控制替换权限,遇到Start开启替换,遇到ERROR关闭替换
  2. 逐行处理:遍历每一行时,根据当前状态决定是否执行替换,所有行都保留到processed_lines列表中,保证内容完整
  3. 文件操作:使用with语句自动管理文件生命周期,读取完成后用w模式清空原文件并写入处理后的内容
  4. 精准替换:直接匹配行内容做替换,避免正则匹配的冗余操作,逻辑更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:54:17