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

Python3.6优化文本提取:循环读取时记录行索引以减耗时

优化Python文本提取:单次遍历文件,从上次位置继续读取

我太懂这种反复读大文件的痛苦了——每次迭代都从头读一遍,数据量大的时候简直是时间黑洞!既然你的文件结构是按顺序出现多组FIRST xxx和SECOND xxx,而且不会回溯,那我们完全可以通过单次打开文件+保留读取位置的方式来彻底解决这个问题,让整个文件只被遍历一次,每次迭代直接从上次结束的地方继续找目标。

核心思路

  1. 只打开一次文件:保持文件句柄打开状态,Python的文件对象是自带读取状态的,迭代到哪一行,下次就从哪一行继续。
  2. 逐组匹配+及时停止:对每一组strings1[i]和strings2[i],先找到起始标记,然后收集行直到找到对应的结束标记,找到后立刻停止当前段的读取,不用继续往后扫。

优化后的代码示例

# 你的起始和结束字符串列表
strings1 = ["FIRST A", "FIRST B", "FIRST C"]
strings2 = ["SECOND A", "SECOND B", "SECOND C"]

# 关键:只打开一次文件,全程保持句柄
with open("your_target_file.txt", "r", encoding="utf-8") as f:
    # 遍历每一组起始-结束对
    for start_flag, end_flag in zip(strings1, strings2):
        current_group_data = []
        is_capturing = False
        
        # 从上次迭代停下的位置开始逐行读
        for line in f:
            stripped_line = line.strip()
            
            # 找到起始标记,开启捕获模式
            if stripped_line == start_flag:
                is_capturing = True
                # 如果需要把起始行也加入数据,就注释掉下面的continue
                continue
            
            # 找到结束标记,关闭捕获并跳出当前行循环
            if stripped_line == end_flag:
                is_capturing = False
                break
            
            # 处于捕获状态时,收集当前行
            if is_capturing:
                current_group_data.append(stripped_line)
        
        # 这里处理当前组提取到的数据
        print(f"提取到 {start_flag} 到 {end_flag} 的数据:")
        print(current_group_data)
        # 替换成你的业务逻辑:比如写入文件、分析数据等

为什么这比原来高效?

  • 避免重复读取:整个文件只被遍历一次,而不是迭代多少次就读多少次,对于大文件来说,时间成本直接砍到原来的1/N(N是组数)。
  • 及时终止读取:每找到一组的结束标记就立刻停止当前段的扫描,不会多余读取后面的内容。
  • 低内存占用:逐行读取,不需要把整个文件加载到内存,就算是几GB的大文件也能轻松处理。

可选调整

  • 如果需要包含起始行或者结束行,只需要调整代码中的continue和break位置:
    • 要包含起始行:删除if stripped_line == start_flag块里的continue,并加入current_group_data.append(stripped_line)。
    • 要包含结束行:在if stripped_line == end_flag块里先加入current_group_data.append(stripped_line),再执行break。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:29:00