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

Python文本处理:索引行值替换与多行文本修正问题求助

文本批量修正:两类内容处理方案

需求概述

给定文本文件与目标字符列表 chars = ['carl', 'charles', 'gary'],需完成两类内容的批量修改:

  1. 第一类场景:
    输入:
    face carl eyes 01 mouth 05 brows 00 blush 00 tears 00
    carl"Lovely" id person_0fc83b3b
    
    输出:将第二行的id person_0fc83b3b改为id face_0fc83b3b,追加到第一行末尾,删除原第二行:
    face carl eyes 01 mouth 05 brows 00 blush 00 tears 00 id face_0fc83b3b
    
  2. 第二类场景:
    输入:
    charles "Lovely!" id person_0ac83b4b
    
    输出:在该行上方新增指定格式的face行:
    face charles blank id face_0ac83b4b
    charles "Lovely!" id person_0ac83b4b
    

原代码问题点

原代码未能实现预期效果的核心原因:

  • 第一类场景:错误从当前行提取id,未处理跨两行的关联逻辑,且未跳过原第二行导致冗余内容。
  • 第二类场景:未替换id前缀(直接复用了原person_前缀),循环遍历字符时可能重复添加行。
  • 缺乏边界判断,容易出现索引越界问题。

修正后的代码实现

chars = ['carl', 'charles', 'gary']

# 读取文件并统一处理换行符
with open('input.txt', 'r') as f:
    lines = [line.rstrip('\n') for line in f]

new_lines = []
i = 0
while i < len(lines):
    current_line = lines[i]
    target_char = None
    
    # 匹配当前行中的目标字符
    for char in chars:
        if char in current_line:
            target_char = char
            break
    
    if not target_char:
        new_lines.append(current_line)
        i += 1
        continue
    
    # 处理第一类场景:face属性行 + 下一行的id行
    if current_line.startswith(f'face {target_char}') and (i + 1) < len(lines):
        next_line = lines[i+1]
        if target_char in next_line and 'id person_' in next_line:
            # 提取并替换id前缀
            id_str = next_line.split('id ')[1].replace('person_', 'face_')
            # 合并行
            merged_line = f"{current_line} id {id_str}"
            new_lines.append(merged_line)
            # 跳过已处理的下一行
            i += 2
            continue
    
    # 处理第二类场景:单独的id行
    if 'id person_' in current_line:
        # 提取并替换id前缀
        id_str = current_line.split('id ')[1].replace('person_', 'face_')
        # 添加新增的face行
        new_lines.append(f"face {target_char} blank id {id_str}")
        # 添加原行
        new_lines.append(current_line)
        i += 1
        continue
    
    # 不匹配规则的行直接保留
    new_lines.append(current_line)
    i += 1

# 写入结果文件
with open('modified.txt', 'w') as f:
    f.write('\n'.join(new_lines) + '\n')

关键改进说明

  • 使用while循环处理行迭代,方便跳过第一类场景中已合并的下一行,避免重复处理。
  • 统一去除原行的换行符,最后统一写入,避免因换行符不一致导致的格式问题。
  • 针对两类场景做精确的条件判断:
    • 第一类:先验证当前行是face {char}开头,再检查下一行是否包含目标字符和person_前缀的id,确保只处理符合要求的连续行。
    • 第二类:直接匹配带person_前缀id的行,替换前缀后插入指定格式的face行。
  • 增加索引边界判断,防止访问超出列表长度的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:32:21