python - Python - 解析 Junos 路由器配置以连续显示数据
问题描述
我有下面的 Junos 路由器配置部分。我正在尝试解析数据以显示下面的结果。我尝试了很多方法,但我遇到的问题是我似乎无法为每个接口(lo0.2 和 xe-1/0/2.1210)获得唯一的线路。我将非常感谢帮助理解实现所需输出的最佳方法。我正在尝试做的是解析这些路由器配置以在 excel 中的行中显示关键数据,这也将包括接口配置项。
我试图循环浏览配置并寻找匹配的行,但我永远无法同时获得这两个接口。只需要一些关于如何实现这一点的想法。
for line in config:
if line.startswith('set routing-instances'):
if 'options router-id' in line:
self.router_id = line.split()[5]
elif 'interface' in line:
self.interface = line.split()[5]
elif 'vrf-import' in line:
self.vrf_import_policy = line.split()[4]
elif 'vrf-export' in line:
self.vrf_export_policy = line.split()[4]
set routing-instances redwood-ca routing-options router-id 10.10.10.1
set routing-instances redwood-ca routing-options autonomous-system 620
set routing-instances redwood-ca routing-options autonomous-system independent-domain no-attrset
set routing-instances redwood-ca protocols bgp path-selection always-compare-med
set routing-instances redwood-ca protocols bgp path-selection external-router-id
set routing-instances redwood-ca protocols bgp family inet unicast
set routing-instances redwood-ca protocols bgp hold-time 30
set routing-instances redwood-ca protocols bgp log-updown
set routing-instances redwood-ca instance-type vrf
set routing-instances redwood-ca interface lo0.2
set routing-instances redwood-ca interface xe-1/0/2.1210
set routing-instances redwood-ca route-distinguisher 10.10.10.1:100
set routing-instances redwood-ca vrf-import redwood-ca-vrf-import
set routing-instances redwood-ca vrf-export redwood-ca-vrf-export
set routing-instances redwood-ca vrf-table-label
Desired Output
vrf router-id interface vrf-import vrf-export
redwood-ca 10.10.10.1 lo0.2 redwood-ca-vrf-import redwood-ca-vrf-export
redwood-ca 10.10.10.1 xe-1/0/2.1210 redwood-ca-vrf-import redwood-ca-vrf-export
感谢您提供的任何帮助。是否有将垂直类型数据转换为水平行的标准/最佳实践方法?
提前感谢大家的帮助。
麦克风
解决方案
您能否将界面设为列表并在每次找到时附加匹配项。
**interface = list()**
for line in config:
if line.startswith('set routing-instances'):
if 'options router-id' in line:
router_id = line.split()[5]
elif 'interface' in line:
**interface.append(line.split()[4])**
elif 'vrf-import' in line:
vrf_import_policy = line.split()[4]
elif 'vrf-export' in line:
vrf_export_policy = line.split()[4]
print interface
输出 - ['lo0.2', 'xe-1/0/2.1210']
推荐阅读
- python - 如何从 python 中的数据创建 .csv 或 .xlsx 文件
- python - 如何使用 json.dump 来显示我的所有数据行而不是仅显示一行 Python
- elixir - 为什么我的 ErrorView 没有在测试中呈现?
- javascript - 使用 Gatsby 路由不起作用 - 到达路由器
- python - 如何在组合标记器中标记未知单词(带有标签 UNK 的标记)
- firebase - 很棒的通知 - 创建了两个预定通知,只有一个被触发
- python - 尝试创建世界地图时如何解决这些“未解决的属性引用”?
- apache-kafka - Kafka/Streams 消费者扩展架构
- javascript - node.js oauth-1.0a 适用于 Twitter API v1.1 但不适用于 v2
- javascript - .Net-Core 对象属性字符串(月/年)在 JS 中划分