簡體   English   中英

如何對Yaml文件進行排序並為每棵樹提供值

[英]How to sort through a yaml file and provide values for each tree

我正在編寫一個腳本以讀取YAML配置,並且在for循環和字典的邏輯上遇到一些問題。 當完成靜態操作后,我可以打印每個值,但這超出了腳本的用途。 正如我想使用YAML配置文件動態調用函數。

到目前為止,我只能從for腳本中獲取第一個鍵和值。 每當我嘗試通過使用dataMap [key] [0] [value]更進一步時,我便無法再進一步。

import yaml

with open('design.yaml') as f:
    dataMap = yaml.safe_load(f)
print("================================")
print("Topo #1")
print("================================")
print(f"Topo Name: {dataMap['topology'][0]['name']}")
print(f"vPort: {dataMap['topology'][0]['vport']}")
print(f"DG Name: {dataMap['topology'][1]['devicegroup']}")
print(f"Multiplier: {dataMap['topology'][1]['multiplier']}")
print(f"Eth Name: {dataMap['topology'][1]['eth']['name']}")
print("Auto Output - To look just like above")
print("================================")
for key, value in dataMap.items():
    #Updated
    print("KEY: {} - VALUE: {}".format(key, value[0].items()))
    print("====")
print("================================")
#print("Recursive Function Test")
#print("================================")
#myprint(dataMap)
config:
 -name: Test
topology:
 - name: DC1
   vport: Port1
 - devicegroup: DC1 DG1
   multiplier: 50
   eth:
     name: ETH1
     macStart: 00:01:01:01:00:01
     macStep: 00:00:00:00:00:01
     enableVLAN: True
     vlanID: 100
     vlanStep: 0
   ipv4:
     name: DC1 DG1 IPv4
     startIP: 10.1.1.10
     stepIP: 0.0.0.1
     netmask: 255.255.255.0
     gateway: 10.1.1.1
     gwStep: 0.0.0.0
 - name: TEST2
   vport: Port2
 - devicegroup: TEST DG2
Output:
KEY: config - VALUE: dict_items([('apiServer', '10.255.251.105'), ('apiServerPort', 443), ('osPlatform', 'linux'), ('username', 'admin'), ('password', 'admin'), ('chassisIP', '10.253.0.82'), ('licenseserver', '10.253.0.82'), ('licensemode', 'subscription'), ('licensetier', 'tier3'), ('POCName', 'XXXXX'), ('POCNumber', 'XXXXX')])
====
KEY: topology - VALUE: dict_items([('name', 'DC1'), ('vport', 'Port1')])

現在的問題是,如何從YAML文件中提取設備組信息? 將value [0]更改為value [1]會導致索引問題。

print("KEY: {} - VALUE: {}".format(key, value[1].items()))
IndexError: list index out of range

那么,我該如何進一步進入YAML文件呢?

我不確定100%,但是我不認為f字符串中的函數調用會得到評估,因此請嘗試執行以下操作:

    print("KEY: {} - VALUE: {}".format(key, value[0].items()))

代替。

另外, key配置的值是一個只有一個元素的序列(即,作為Python列表加載),因此您不能在該序列中進一步索引然后是0

您最好嘗試執行以下操作:

for key, values in dataMap.items():
    for idx, value in enumerate(values):
        print("KEY: {} - VALUE[{}]: {}".format(key, idx, value.items()))
        print("====")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM