Python逐行匹配序列逻辑错误修复:PRECHARGE与ACTIVE顺序问题
问题分析与修复
原代码的逻辑错误在于逐行检查是否包含ACTIVE,并仅根据当前行是否有PRECHARGE来计数,这完全不符合你要判断「关键词出现顺序」的需求——你的目标是统计整个文本中PRECHARGE在ACTIVE之前的序列(触发A=1)和PRECHARGE在ACTIVE之后的序列(触发error=1),而非统计单独包含ACTIVE的行数。
从你描述的文本内容(第1-2行是PRECHARGE→ACTIVE,第3-4行是ACTIVE→PRECHARGE)来看,原代码会把第2行的ACTIVE(无PRECHARGE)和第3行的ACTIVE(无PRECHARGE)各加一次A,导致A=2,这显然不是你要的结果。
修复方案
我们需要跟踪关键词出现的状态,判断两者的先后顺序:
import re A = 0 error = 0 seen_precharge = False seen_active = False with open("page_stats_ver2.txt", "r") as f: for line in f: # 标记当前行的关键词 has_precharge = bool(re.search(r"PRECHARGE", line)) has_active = bool(re.search(r"ACTIVE", line)) if has_precharge: seen_precharge = True # 如果已经见过ACTIVE,说明PRECHARGE在ACTIVE之后,触发error if seen_active: error = 1 # 按需求设为1,若要统计次数则用error +=1 if has_active: seen_active = True # 如果已经见过PRECHARGE,说明PRECHARGE在ACTIVE之前,触发A if seen_precharge: A = 1 # 按需求设为1,若要统计次数则用A +=1 print(f"A = {A}") print(f"error = {error}")
逻辑说明
- 用
seen_precharge和seen_active两个变量跟踪是否已经出现过对应关键词 - 遍历每一行时,先检查是否有
PRECHARGE:- 如果有,且之前已经见过
ACTIVE,说明是ACTIVE在前、PRECHARGE在后,设置error=1
- 如果有,且之前已经见过
- 再检查是否有
ACTIVE:- 如果有,且之前已经见过
PRECHARGE,说明是PRECHARGE在前、ACTIVE在后,设置A=1
- 如果有,且之前已经见过
- 使用
with语句打开文件,更安全(自动关闭文件)
如果你的需求是统计所有符合顺序的序列次数(而非只要出现就设为1),只需把A = 1改成A +=1,error =1改成error +=1即可。
内容的提问来源于stack exchange,提问作者Findy
相关产品推荐
相关产品推荐

