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

如何将txt中配对的localpref与via内容打印在同一行?

问题解决思路与代码实现

你的核心问题是原代码将localpref和via行单独输出,而编辑1的代码错误地判断同一行同时包含两个关键词(实际它们分布在不同行),导致无输出。正确做法是成对收集每组的两个值,再合并输出。

修正后的代码

import sys

with open(open_file, 'r') as LP:
    all_data = LP.readlines()
    current_group = {}
    keys = ['localpref', 'via']
    
    for line in all_data:
        line = line.strip()
        # 跳过空行和分隔线
        if not line or line.startswith('---'):
            # 收集满一组就输出
            if len(current_group) == 2:
                print('-'*65)
                print(f"{current_group['localpref']} {current_group['via']}")
                sys.stdout.flush()
                current_group = {}
            continue
        
        # 提取关键词对应的值
        for key in keys:
            if key in line:
                # 只分割一次,保留值的完整性
                _, value = line.split(maxsplit=1)
                current_group[key] = value
                break
    # 处理最后一组(文件末尾无分隔线的情况)
    if len(current_group) == 2:
        print('-'*65)
        print(f"{current_group['localpref']} {current_group['via']}")
        sys.stdout.flush()

代码说明

  • 分组存储:用current_group字典临时保存每组的localpref和via值,每碰到分隔线就检查是否收集完成一组,完成则输出并重置字典。
  • 过滤无效行:直接跳过空行和分隔线,只处理有效数据行。
  • 安全分割:split(maxsplit=1)确保即使值中包含空格,也能完整提取(比如via的后续值有空格也不会被拆分)。
  • 收尾处理:循环结束后检查是否还有未输出的最后一组,避免遗漏。

输出结果

运行后会生成你需要的格式:

-----------------------------------------------------------------
localpref 300, via et-0/1/5.0
-----------------------------------------------------------------
localpref 300 via et-0/1/5.0
-----------------------------------------------------------------
localpref 300, via ae0.0
-----------------------------------------------------------------

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:43