栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyyaml使用记录

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyyaml使用记录

文章目录

参考知乎
官方文档


  1. 依赖库
    pip install PyYAML

  1. 基本语法
  • 使用缩进分级,需使用空格缩进
  • ‘#’ 表示注释
  • 大小写敏感
  • ‘-’ 开头会被转为list
  • 包含’:’ 转换为字典
  • 单引号内容按照字符串输出,双引号内容遇到转义字符会转换
  • ‘!!type’ e.g. ‘!!int’ 强制类型转换

  1. 基本用法
  • load 加载
import yaml
with open(file, 'r') as f:
	data = f.read()
cfg = yaml.load(document)
# cfg = yaml.safe_load(document)
  • dump保存
import yaml
with open('cfg.yaml') as f:
	f.write(yaml.dump(cfg))
  • & * aliases 别名
args1: &a
	name: n1
args2: *a
# << 表示合并到当前数据
  • tag

  1. 使用需求
  • 合并多个yaml(字典-多层嵌套)

  • argparse 传入的列表参数变为字典

def list2dict(l: list):
    """将list 中数据变为dict 可能有嵌套字典
    :param l: 列表
    :return: d: 字典
    """
    d = {}
    assert len(l) % 2 == 0
    keys = l[::2]
    values = l[1::2]
    for i, key in enumerate(keys):
        dd = {}
        ks = key.split('.')
        dd[ks[-1]] = values[i]
        for j in range(len(ks)-2, -1, -1):
            dd = {ks[j]: dd}
        d.update(dd)
    return d


def merge_dict(dicts: list):
    """融合多个字典 包括嵌套字典
    :param dicts: 字典列表
    :return: d_res: 一个字典
    """
    d_res = {}
    for d in dicts:
        for k1, v1 in d.items():
            if isinstance(v1, dict):
                v1 = merge_dict([d_res.get(k1, {}), v1])
            d_res[k1] = v1
    return d_res


if __name__ == '__main__':
    # 测试 list2dict
    if 0:
        l = ['a.c.d', '1', 'b.e', 2]
        d = list2dict(l)
        print(d)
    # 测试字典合并 merge_dict
    if 0:
        d1 = {'a': 1, 'e': {'f': 4}}
        d2 = {'a': 11, 'b': 2, 'e': {'g': 54}}
        d3 = {'c': 3, 'e': {'f': 44, 'g': 5}}
        d = [d1, d2, d3]
        d_res = merge_dict(d)
        print(d_res)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316583.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号