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

如何用循环读取文件中匹配标记行间的指定行范围内容?

解决方案

核心思路

先把文件所有内容读入内存列表,方便随机访问;收集所有PROMPT#行的索引后,通过循环遍历这些索引,提取相邻索引之间的内容,最后处理最后一段到文件末尾。

修正后的完整代码

import re
import os

# 假设files是目录下的文件路径列表
files = [f for f in os.listdir('.') if os.path.isfile(f)]

for file_path in files:
    with open(file_path, 'r') as f:
        # 读取所有行到列表,保留原始格式(包括换行)
        lines = f.readlines()
        # 收集所有匹配PROMPT#的行的索引(0-based)和对应的配置名
        prompt_positions = []
        for idx, line in enumerate(lines):
            stripped_line = line.strip()
            # 修正正则的拼写错误(原代码是PROMTP#,应该是PROMPT#)
            if re.search(r'PROMPT#', stripped_line):
                parts = stripped_line.split()
                if len(parts) >=3:
                    config_name = parts[2]
                    prompt_positions.append( (idx, config_name) )
        
        # 提取各个配置段内容
        for i in range(len(prompt_positions)):
            current_idx, current_name = prompt_positions[i]
            # 确定当前段的结束索引
            if i < len(prompt_positions)-1:
                next_idx = prompt_positions[i+1][0]
                # 当前段是current_idx+1到next_idx-1(不包含next_idx)
                segment = lines[current_idx+1 : next_idx]
            else:
                # 最后一段,从current_idx+1到文件末尾
                segment = lines[current_idx+1 :]
            
            # 处理或输出结果,这里示例是打印配置名和内容
            print(f"=== 配置段: {current_name} ===")
            # 合并行并打印,也可以根据需求保存到文件等
            print(''.join(segment).strip())
            print("------------------------")

关键说明

  • 读取所有行到列表:避免多次读取文件导致的指针问题,lines列表可以直接通过索引访问任意行。
  • 修正正则错误:原代码中PROMTP#是拼写错误,改为PROMPT#才能正确匹配目标行。
  • 索引处理:用Python列表默认的0-based索引,段落范围设为current_idx+1到next_idx(左闭右开,刚好取到两个分隔行之间的内容)。
  • 循环逻辑:通过range(len(prompt_positions))遍历每个分隔点,判断是否是最后一个,分别处理中间段和末尾段。

输出示例(对应你的示例文件)

=== 配置段: startup-config ===
!
hostname bla
!
no banner motd
------------------------
=== 配置段: system ===
sysinfo(System Information)
Main Memory Size    : 512 MB
flash Memory Size   : 256 MB
H/W Revision        : VA0
NOS Version         : 1.15
------------------------
=== 配置段: version ===
NOS version 1.15_0006
------------------------

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:50:25