在项目中我们有时候需要将有序字典生成有序yml文件
import yaml
from collections import OrderedDict
def generate_data():
config = OrderedDict()
config["family"] = [{'name': 'papa', 'age': 56},
{'name': 'mama', 'age': 55},
{'name': 'panda', 'age': 26}]
config["house"] = {'location': 'nanjing'}
config["history"] = {"time": "20-century"}
config["money"] = "You can never imaging!"
return config
def yaml_ordered_dump(data, stream=None, Dumper=yaml.Dumper, **kwargs):
class OrderedDumper(Dumper):
pass
def _dict_representer(dumper, data):
return dumper.represent_mapping(
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,data.items()
)
def _unicode_representer(dumper, uni):
return yaml.ScalarNode(tag='panda', value=uni)
OrderedDumper.add_representer(OrderedDict, _dict_representer)
OrderedDumper.add_representer(unicode, _unicode_representer)
return yaml.dump(data, stream, OrderedDumper, **kwargs)
def export_config_yml_in_order():
config = generate_data()
with open('C:\\Users\\Administrator\\Desktop\\test_yml\\test.yml', 'wt') as f:
yaml_ordered_dump(config, f, default_flow_style=False)
with open('C:\\Users\\Administrator\\Desktop\\test_yml\\test.yml', 'rt') as f:
res = f.read()
print(res)
if __name__ == '__main__':
export_config_yml_in_order()