Python实现从文件标记词位置分段读取计数时结果重复的问题排查
代码Bug根因分析
file.readlines()调用逻辑错误:该方法一次性读取全部文件行并将文件指针移动到末尾,第二次调用时直接返回空列表,根本不会遍历文件后半段内容。counting变量无动态更新:Python 中整数为不可变类型,counting = line_count仅在初始化时将 0 赋值给counting,后续line_count变动时counting始终保持 0,无法实现遍历位置偏移的效果。- 分段统计逻辑缺失:两次统计之间未重置计数器,也未记录第一次匹配
story的行位置,导致第二次循环无有效遍历动作,line_count保留第一次的统计结果 6。
修正实现
修正思路
- 一次性将文件所有行读入内存列表,避免重复调用
readlines()导致的指针异常。 - 跟踪
story标记的匹配次数,遇到第一次匹配时保存当前计数,重置计数器后从当前行继续遍历,直到第二次匹配时再保存结果。 - 复用原有非空行判断逻辑,保持统计口径一致。
修正后代码
# 使用上下文管理器自动管理文件关闭 with open("testing_area.txt", "r") as file: all_lines = file.readlines() current_count = 0 match_counter = 0 result_stats = [] # 逐行遍历所有已读取的行 for line in all_lines: # 跳过空行,和原有统计逻辑保持一致 if line == "\n": continue current_count += 1 # 匹配到标记词 if line.startswith("story"): result_stats.append(current_count) match_counter += 1 # 达到两次匹配后直接终止遍历 if match_counter == 2: break # 重置计数器,开始下一段统计 current_count = 0 # 输出两次分段的统计结果 print(result_stats[0]) print(result_stats[1])
输出验证
针对给定的测试文件内容,运行修正代码后输出为:
6 3
与预期结果完全一致。
内容的提问来源于stack exchange,提问作者Jorro Oliveira
相关产品推荐
相关产品推荐

