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")
代码说明:
- 使用
re.escape(actual_id)处理ID中的特殊字符,避免正则语法冲突 - 将文件转为迭代器
iter(f),通过next(lines)安全获取下一行 - 用列表推导式处理ID,自动过滤空行和换行符
- 增加异常处理,防止匹配到文件最后一行时无法获取下一行
内容的提问来源于stack exchange,提问作者Rejoy
相关产品推荐
相关产品推荐

