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

Python代码求助:匹配指定ID后跳转下一行统计Solution词数

问题分析与代码修正

原代码存在的问题:

  • 未导入re模块,正则功能无法使用
  • readlines()读取的ID包含换行符,需用strip()去除
  • 正则表达式错误:直接写{actual_id}无法引用变量,且无需转义{};正确的正则应匹配ID后接|RQ的格式
  • 获取下一行的方式错误:字符串对象没有next()方法,需调用文件对象的next()
  • 统计次数时误用了原行而非下一行
  • 遍历ID时的range会漏掉最后一个ID,直接遍历列表更稳妥
  • 未正确关闭id.txt文件,建议用with语句管理文件

修正后的代码:

import re

# 读取ID列表并处理换行符
with open('id.txt', 'r') as id_file:
    ids = [line.strip() for line in id_file if line.strip()]  # 过滤空行

# 遍历每个ID处理sample.txt
for actual_id in ids:
    print(f"Processing ID: {actual_id}")
    with open('sample.txt', 'r') as f:
        lines = iter(f)  # 将文件转为迭代器,方便获取下一行
        for line in lines:
            # 正则匹配格式:ID后接|RQ,注意转义|(正则中|是特殊字符)
            if re.search(rf'{re.escape(actual_id)}\|RQ', line):
                try:
                    next_line = next(lines).strip()
                    solution_count = next_line.count('Solution')
                    print(f"ID {actual_id}: Solution count is {solution_count}")
                except StopIteration:
                    # 处理文件末尾无下一行的情况
                    print(f"ID {actual_id}: No line found after matching line")

代码说明:

  1. 使用re.escape(actual_id)处理ID中的特殊字符,避免正则语法冲突
  2. 将文件转为迭代器iter(f),通过next(lines)安全获取下一行
  3. 用列表推导式处理ID,自动过滤空行和换行符
  4. 增加异常处理,防止匹配到文件最后一行时无法获取下一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:15:32