首页 > 解决方案 > 使用具有预期样式的 python 生成 yaml 文件

问题描述

我正在使用 yaml 模块生成 yaml 文件,但实际上我没有得到正确的预期输出,下面是代码:

import yaml
list1 = [{'Test01': '01', 'Test02': '02'}, {'Test03': '03', 'Test04': '04'}]
some_data = {"data": list1} 
yaml_data = {
  'version': '1.0'
}
yaml_data.update(some_data)

print(yaml.dump(yaml_data, default_flow_style=False))

实际输出:

data:
- Test01: '01'
  Test02: '02'
- Test03: '03'
  Test04: '04'
version: '1.0'

预期输出:

data:
  - 
    Test01: '01'
    Test02: '02'
  - 
    Test03: '03'
    Test04: '04'
version: '1.0'

标签: pythonpython-3.xyamlpyyaml

解决方案


您可以使用OrderedDict而不是dict保留顺序yaml.dump()

from collections import OrderedDict

import yaml

list1 = [{'Test01': '01', 'Test02': '02'}, {'Test03': '03', 'Test04': '04'}]
some_data = OrderedDict({"data": list1})
yaml_data = OrderedDict({
  'version': '1.0'
})
yaml_data.update(some_data)
print(yaml_data)


def represent_dictionary_order(self, dict_data):
    return self.represent_mapping('tag:yaml.org,2002:map', dict_data.items())


def setup_yaml():
    yaml.add_representer(OrderedDict, represent_dictionary_order)


setup_yaml()
print(yaml.dump(yaml_data, default_flow_style=False))

推荐阅读