Mam następujący problem mapowania dokumentów w pliku YAML na dict
i prawidłowego mapowania ich.Konwertowanie pliku YAML na python dict
Mam następujący plik YAML, który reprezentuje serwer (db.yml
):
instanceId: i-aaaaaaaa
environment:us-east
serverId:someServer
awsHostname:ip-someip
serverName:somewebsite.com
ipAddr:192.168.0.1
roles:[webserver,php]
załadować ten plik YAML, co mogę zrobić bez problemu, myślę, że rozumiem.
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]
Chciałbym logikę pracować tak: YAML
- obciążenia, mapa do dict
- wygląd w każdej dict w dokumencie, jeśli
instanceId
pasuje do tego, który został ustalony przezgetInstanceId()
, a następnie wydrukuj wszystkie klucze i wartości dla tego dokumentu.
Jeśli spojrzymy na strukturę danych map z wiersza poleceń, otrzymuję:
{'instanceId': 'i-aaaaaaaa environment:us-east serverId:someServer awsHostname:ip-someip serverName:someserver ipAddr:192.168.0.1 roles:[webserver,php]'}
myślę, że może być utworzenie struktury danych dla pliku YAML nieprawidłowo, a na dopasowanie zawartości na dict
, jestem trochę zagubiony.
Uwaga boczna: Nie mogę załadować wszystkich dokumentów w tym pliku przy użyciu yaml.load()
, próbowałem yaml.load_all()
, który wydaje się działać, ale mój główny problem nadal istnieje.
Proszę zmienić nazwę "dyktować" na coś innego. To źle.Ponadto możesz wydrukować wartość 'yaml.load_all (stream)', abyśmy mogli zobaczyć, co faktycznie masz? Na koniec nie wydaje się, że masz dobry przykład YAML - gdzie zdefiniowano wiele serwerów? – gahooa
Zmienię nazwę, dziękuję za najlepszą praktykę. yaml_load_all (stream) pokazuje:. Usunąłem drugi dokument, aby rozwiązać problem. –
Jaka biblioteka/moduł jest używana w kodzie? Myślę, że poprawiłoby to pytanie, aby dodać oświadczenie o imporcie, aby osoby, które znalazły to pytanie, nie musiały go szukać i potencjalnie znaleźć wiele możliwych. – Zelphir