Search code examples
yamlpyyamlruamel.yaml

Writing to a Yaml file


I am using python to write in to a YAML file. But I am unable to write it in a specific format as I require

  awesome_people:
    name: Awesome People
    entities:
      - device_tracker.dad_smith
      - device_tracker.mom_smith

I am getting problem in the entities part, as I am unable to create a list with proper indents as in the above YAML.

How can I create the above exact format?


Solution

  • You can do this with ruamel.yaml, setting the sequence indent from default two to four, and the offset of the dash+space (which need a minimum indent of two), from zero to two. You should leave the mapping indent unchanged from the default:

    import sys
    import ruamel.yaml
    
    ent = ['device_tracker.dad_smith', 'device_tracker.mom_smith']
    data = dict(awesome_people = dict(name='Awesome People', entities=ent))
    
    yaml_str = """\
    """
    
    yaml = ruamel.yaml.YAML()
    yaml.indent(sequence=4, offset=2)
    # print(data)
    yaml.dump(data, sys.stdout)
    

    which gives:

    awesome_people:
      name: Awesome People
      entities:
        - device_tracker.dad_smith
        - device_tracker.mom_smith