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

Python实现简单文本文件中含指定特征行的文本区块提取

新手友好的最简实现方案

核心逻辑(零复杂概念,逐行读取即可完成)

完全不需要编写复杂的解析规则,顺着文件的行顺序遍历即可:遇到区块起始标识就开始逐行攒内容,边攒边记录当前区块是否出现过目标特征;遇到区块结束行就校验状态——如果攒的内容包含目标特征,就把整个区块完整留存,否则直接清空临时攒的内容,从头接收下一个区块。

具体实现步骤

  • 初始化两个临时状态变量:
    • current_temp_block:空列表,用来逐行存储当前正在收集的区块内容
    • is_contains_target:布尔值,默认False,标记当前攒的区块里有没有出现过service prov特征行
  • 逐行读取文件内容,对每一行做分支判断:
    1. 如果当前行是独立的exit:
      • 检查is_contains_target的状态:如果为True,就把这行exit也加到临时区块里,整体转成字符串存到最终结果列表
      • 不管有没有命中条件,都清空临时区块列表、把标记位重置为False,准备接收下一个区块
    2. 如果当前行是room开头的新区块起始行:
      • 直接把这行加到临时区块列表,同时把标记位重置为False
    3. 剩下的所有区块中间行:
      • 先把行内容加到临时区块列表,再检查这行是否包含service prov,如果命中就把标记位改成True

可直接运行的代码

# 最终存储所有符合条件的区块
matched_blocks = []
current_temp_block = []
is_contains_target = False

# 替换为你自己的文件路径即可
with open("待处理文本.txt", "r", encoding="utf-8") as file_handle:
    for raw_line in file_handle:
        # 去掉行尾的换行符,避免判断干扰
        clean_line = raw_line.rstrip("\n")
        
        # 碰到区块结束标识exit
        if clean_line == "exit":
            if is_contains_target:
                current_temp_block.append(clean_line)
                matched_blocks.append("\n".join(current_temp_block))
            # 重置临时状态
            current_temp_block.clear()
            is_contains_target = False
            continue
        
        # 碰到新区块的起始标识
        if clean_line.startswith("room"):
            current_temp_block.append(clean_line)
            is_contains_target = False
            continue
        
        # 处理区块中间的普通内容
        current_temp_block.append(clean_line)
        if "service prov" in clean_line:
            is_contains_target = True

# 输出结果到控制台,也可以自行写入到新文件
print("\n\n".join(matched_blocks))

新手避坑提醒

  • 判断exit行用的是完全相等匹配,严格对应题目里独立exit行作为区块结束的规则,不会误把内容中带exit的普通行判定为结束标记
  • 特征行匹配用的是子串包含判断,不会因为目标行前后有空格、其他附带字符漏匹配
  • 逐行流式读文件的方式,哪怕处理上G的超大文本也不会一次性占满内存,不需要额外做性能优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 11:24:02