我已经在网上搜索了我的问题的答案,并且我已经使用了我所学到的方面来帮助我达到这一点。但是,我一直无法找到解决办法让我到达我需要的地方。
以最短的方式,我需要创建一个字典,其中包含从文件中读取的字典和值列表,并打印输出。
我能够使用静态创建的字典来完成此操作,但在从文件读入时,我似乎无法以相同的格式创建字典。
以下是我能够正常工作的代码:
routers = {'fre-agg1': {'interface Te0/1/0/0': ["rate-limit input 135", "rate-limit input 136"],
'interface Te0/2/0/0': ["rate-limit input 135", "rate-limit input 136"]},
'fre-agg2': {'interface Te0/3/0/0': ["rate-limit input 135", "rate-limit input 136", "rate-limit input 137"]}}
for rname in routers:
print rname
for iname in routers[rname]:
print iname
for int_config in routers[rname][iname]:
print int_config
它的输出完全以我需要的格式打印:
fre-agg2
interface Te0/3/0/0
rate-limit input 135
rate-limit input 136
rate-limit input 137
fre-agg1
interface Te0/1/0/0
rate-limit input 135
rate-limit input 136
interface Te0/2/0/0
rate-limit input 135
rate-limit input 136
我尝试阅读的文件格式不同:
ama-coe:interface Loopback0
ama-coe: ip address 10.1.1.1 255.255.255.255
ama-coe:interface GigabitEthernet0/0/0
ama-coe: description EGM to xyz Gi2/0/1
ama-coe: ip address 10.2.1.1 255.255.255.254
ama-coe:interface GigabitEthernet0/0/1
ama-coe: description EGM to abc Gi0/0/1
ama-coe: ip address 10.3.1.1 255.255.255.254
对于这个文件,我希望文件的输出与上面显示的输出相同,接口配置列在设备名称下的接口名称
ama-coe
interface Loopback0
ip address 10.1.1.1 255.255.255.255
interface GigabitEthernet0/0/0
etc etc etc
到目前为止,这是我的代码:
routers = {}
with open('cpe-interfaces-ipaddress.txt') as inputFile:
inputData = inputFile.read().splitlines()
for rname in inputData:
device, stuff = rname.split(':')
if not device in routers:
routers[device] = None
elif stuff == "interface":
routers[device][None] = stuff
我知道这段代码非常不完整,但我不能像我在静态创建字典时那样找出字典和列表结构。
我们将非常感谢您提供的任何帮助。
谢谢。
答案 0 :(得分:0)
routers = {}
with open('cpe-interfaces-ipaddress.txt') as inputFile:
cur_interface = None
for rname in inputFile:
device, stuff = rname.strip().split(':')
print device, stuff, cur_interface
if not device in routers:
routers[device] = {}
if stuff.startswith("interface"):
key_word, interface = stuff.split(' ')
routers[device].setdefault(interface, [])
cur_interface = interface
else: # ip address
routers[device][cur_interface].append(stuff)
不知道这是否符合您的需要。我假设每个IP地址都属于以前的接口。
使用字典组织内容的方式很常见。您应该学习一些内置方法,例如 setdefault 和追加。