如何从txt文件中读取特定的txt,并使用python将其格式化为表格



我想从类似"Port-channel2'vlan"列的txt文件中提取特定数据,并将vlan后面的内容放在该列中。这是txt文件的一部分:

  • VLAN+IP地址--------------------23接口IP地址是否正常?方法状态协议Vlan1未分配YES未设置向上
    Vlan5 10.26.95.33 YES NVRAM向上
    Vlan20 10.26.93.1 YES NVRAM-向上
    Vlan30 10.26.93.65 YES NVRAM向上
    Vlan 40 10.63.121.251 YES NVRAM-向下
    Vlan50 10.50.50.54是NVRAM上升
    Vlan60 10.26.95.22是NVRAM下降
    Vlan101 10.26.92.1是NVRAM向上
    Vlan131 10.26.81.1是NVRAM向下
    Vlan134 10.26.82.1是NVRAM上升向上
    Vlan151 10.26.83.1是NVRAM向下
    Vlan201 10.26.80.1是NVRAM向上

  • 子网掩码-------------39互联网地址为10.210.130.10/30互联网地址为172.16.1.202/24互联网地址为151.151.151.151/32网址为10.26.95.33/27互联网地址为10.26.93.1/26互联网地址为10.26.93.65/26互联网地址为10.63.121.251/28互联网地址为10.50.50.54/24互联网地址为10.26.95.22/29互联网地址为10.26.92.1/24互联网地址为10.26.81.1/24互联网地址为10.26.82.1/24互联网地址为10.26.83.1/24互联网地址为10.26.80.1/24##################################################################################

  • LAN表55############

  • 带有VLAN 的接入或中继


接口端口通道2交换机端口中继允许vlan 5,20,30101134201381接口端口通道1接口千兆以太网0/2交换机端口中继允许vlan 5,20,30101134201381接口千兆以太网0/3接口千兆以太网0/0接口千兆以太网0/1通道组1模式打开接口千兆以太网1/0交换机端口中继允许vlan 5,20,30101134201381通道组2模式开启70接口千兆以太网1/1交换机端口中继允许vlan 5,20,30101134201381通道组2模式打开接口千兆以太网1/2接口千兆以太网1/3ip路由172.16.1.203 255.255.255千兆以太网0/1预期输出是预期的输出

这是许多可能的方法之一,但考虑到问题中提供的文本,这是我能想到的最短的方法(可能也是最不健壮的(:

def extract_interface_info(config_text):
"""Returns a list of tuples:
[(port id, channel-group, switchport mode,vlans),...]
"""
return [ (interface[0], # port id
interface[interface.index('channel-group')+1]
if 'channel-group' in interface else '', 
interface[interface.index('switchport')+1],
interface[interface.index('vlan')+1]
)
for interface in
( interface_str.split()
for interface_str in config_text.split('interface')
if 'switchport' in interface_str and 'vlan' in interface_str
)
]
info = extract_interface_info(text)
print('n'.join(str(interface) for interface in info))

打印:

('Port-channel2', '', 'trunk', '5,20,30,101,134,201,381')
('GigabitEthernet0/2', '', 'trunk', '5,20,30,101,134,201,381')
('GigabitEthernet1/0', '2', 'trunk', '5,20,30,101,134,201,381')
('GigabitEthernet1/1', '2', 'trunk', '5,20,30,101,134,201,381')

我使用了一个生成器,该生成器通过关键字"来分割文本;接口";并根据出现在所需部分中所需的关键字过滤得到的字符串:"switchport"one_answers"vlan"。每个符合条件的字符串都被空格分割,并输入到列表理解语句

列表理解语句然后将字符串中所需的项放入每个接口的元组中,并返回这些元组的列表。

注意:channel group并没有出现在所有接口中,因此只需要一个条件语句来查找"channel group"的索引(如果存在(,否则将返回null str。

进一步注意:由于这只是文件的一个片段,如果"switchport"one_answers"vlan"出现在所需上下文之外,则此解决方案将以某种方式失败,例如包含一个或多个错误的元组或引发IndexError。

最新更新