1. 将有序字典保存为yaml文件
data为OrderDict对象生成的字典
def save_ordered_dict_to_yaml(data, save_path, stream=None, Dumper=yaml.SafeDumper, object_pairs_hook=OrderedDict, **kwds):
class OrderedDumper(Dumper):
pass
def _dict_representer(dumper, data):
return dumper.represent_mapping(
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
data.items())
OrderedDumper.add_representer(object_pairs_hook, _dict_representer)
with open(save_path, 'w') as file:
file.write(yaml.dump(data, stream, OrderedDumper, allow_unicode=True, **kwds))
return yaml.dump(data, stream, OrderedDumper, **kwds)
2. 将yaml文件读取为有序字典
def read_yaml_to_ordered_dict(yaml_path, Loader=yaml.Loader, object_pairs_hook=OrderedDict):
class OrderedLoader(Loader):
pass
def construct_mapping(loader, node):
loader.flatten_mapping(node)
return object_pairs_hook(loader.construct_pairs(node))
OrderedLoader.add_constructor(
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
construct_mapping)
with open(yaml_path) as stream:
dict_value = yaml.load(stream, OrderedLoader)
return dict_value
如果文件对内容顺序无关,可以用下面代码
import yaml
def save_dict_to_yaml(dict_value: dict, save_path: str):
"""dict保存为yaml"""
with open(save_path, 'w') as file:
file.write(yaml.dump(dict_value, allow_unicode=True))
def read_yaml_to_dict(yaml_path: str):
with open(yaml_path) as file:
dict_value = yaml.load(file.read(), Loader=yaml.FullLoader)
return dict_value