我遇到了將YAML文件內的文檔映射到dict
並正確映射它們的問題。將YAML文件轉換爲python字典
我有以下YAML文件,它代表了服務器(db.yml
):
instanceId: i-aaaaaaaa
environment:us-east
serverId:someServer
awsHostname:ip-someip
serverName:somewebsite.com
ipAddr:192.168.0.1
roles:[webserver,php]
我加載這個YAML文件,我可以沒有任何問題呢,我想我理解這一點。
instanceId = getInstanceId()
stream = file('db.yml', 'r')
dict = yaml.load_all(stream)
for key in dict:
if key in dict == "instanceId":
print key, dict[key]
我想的邏輯類似下面的工作:
- 負載YAML,地圖與dict
- 看在文檔中的每個字典,如果
instanceId
比賽是哪設置通過getInstanceId()
,然後打印出該文檔的所有鍵和值。
如果我看在命令行中的地圖數據結構,我得到:
{'instanceId': 'i-aaaaaaaa environment:us-east serverId:someServer awsHostname:ip-someip serverName:someserver ipAddr:192.168.0.1 roles:[webserver,php]'}
我想我可能不正確地創建了YAML文件中的數據結構,以及匹配的內容dict
,我有點失落。
附註:我無法使用yaml.load()
加載此文件中的所有文檔,我試過yaml.load_all()
,這似乎可行,但我的主要問題仍然存在。
請將'dict'重命名爲其他名稱。這是壞的。另外,你可以打印'yaml.load_all(stream)'的值,以便我們可以看到你實際上有什麼?最後,它似乎並沒有包含一個好的YAML示例 - 哪裏定義了多個服務器? – gahooa
我會重命名它,謝謝你的最佳做法。 yaml_load_all(流)顯示:<生成器對象load_all在0x10b2648c0>。我刪除了第二個文檔進行故障排除。 –
代碼中使用了什麼庫/模塊?我認爲這會改進這個問題來添加導入語句,以便發現此問題的人不必搜索它並可能找到多個可能的問題。 – Zelphir