Parse yaml into a list in python

35,965

Solution 1

with open("employees.yaml", 'r') as stream:
    out = yaml.load(stream)
    print out['Employees']['user']

Should already give you list of users.Also note that your yaml missing one dash after user node

Solution 2

YAML sequences are translated to python lists for you (at least when using PyYAML or ruamel.yaml), so you don't have to append anything yourself.

In both PyYAML and ruamel.yaml you either hand a file/stream to the load() routine or you hand it a string. Both:

import ruamel.yaml

with open('input.yaml') as fp:
    data = ruamel.yaml.load(fp)

and

import ruamel.yaml

with open('input.yaml') as fp:
    str_data = fp.read()
data = ruamel.yaml.load(str_data)

do the same thing.

Assuming you corrected your input to:

Employees:
    custid: 200
    user:
    - Ash
    - Smith
    - Cox

you can print out data:

{'Employees': {'custid': 200, 'user': ['Ash', 'Smith', 'Cox']}}

and see that the list is already there and can be accessed via normal dict lookups: data['Employees']['user']

Share:
35,965
johnfk3
Author by

johnfk3

Updated on July 09, 2022

Comments

  • johnfk3
    johnfk3 almost 2 years

    I am required to use YAML for a project. I have a YAML file which I am using to populate a list in a Python program which interacts with the data.

    My data looks like this:

    Employees:
        custid: 200
        user: Ash
            - Smith
            - Cox
    

    I need the python code to iterate over this YAML file and populate a list like this:

    list_of_Employees = ['Ash', 'Smith' 'Cox']
    

    I know I must open the file and then store the data in a variable, but I cannot figure out how to enter each element separately in a list. Ideally I would like to use the append function so I don't have to determine my 'user' size every time.

  • johnfk3
    johnfk3 over 8 years
    Thank you, The missing dash was causing the problem