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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 14:15:02