Converting YAML file to python dict Converting YAML file to python dict python python

Converting YAML file to python dict


I think your yaml file should look like (or at least something like, so it's structured correctly anyway):

instance:     Id: i-aaaaaaaa     environment: us-east     serverId: someServer     awsHostname: ip-someip     serverName: somewebsite.com     ipAddr: 192.168.0.1     roles: [webserver,php]

Then, yaml.load(...) returns:

{'instance': {'environment': 'us-east', 'roles': ['webserver', 'php'], 'awsHostname': 'ip-someip', 'serverName': 'somewebsite.com', 'ipAddr': '192.168.0.1', 'serverId': 'someServer', 'Id': 'i-aaaaaaaa'}}

And you can go from there...


So used like:

>>> for key, value in yaml.load(open('test.txt'))['instance'].iteritems():    print key, valueenvironment us-eastroles ['webserver', 'php']awsHostname ip-someipserverName somewebsite.comipAddr 192.168.0.1serverId someServerId i-aaaaaaaa


An additional bug in your code, that doesn't have to do with YAML:

for key in dict:    if key in dict == "instanceId": # This doesn't do what you want        print key, dict[key]

in is an operator that works on sequence types, and also on maps. This is why this isn't a syntax error... but it doesn't do what you want.

key in dict will always evaluate to True, because all the keys you're iterating through are in the dict. So your code boils down to True == "instanceId", which will always evaluate to False, because the boolean value True is never equal to that string.

You might have noticed that the print statement doesn't produce any output; this is because it never gets called.


Just use python-benedict, it's a dict subclass that provides I/O support for most common formats, including yaml.

from benedict import benedict# path can be a yaml string, a filepath or a remote urlpath = 'path/to/data.yml'd = benedict.from_yaml(path)# do stuff with your dict# ...# write it back to diskd.to_yaml(filepath=path)

It's well tested and documented, check the README to see all the features:https://github.com/fabiocaccamo/python-benedict

Install using pip: pip install python-benedict

Note: I am the author of this project