yamleasydict作为参数文件
生活随笔
收集整理的這篇文章主要介紹了
yamleasydict作为参数文件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
環(huán)境配置
# 環(huán)境配置 pip install easydict pip install pyyaml基本用法
# 基本用法 及 dict vs. easydict# 普通dict # (k, v) # k可以是int/float/str # v為dict/任意類型 # 通過dict[?][?]...訪問 gdict = dict() gdict[1] = 1 gdict[2.3] = 2.3 gdict['4'] = '4' 2.3 in gdict Out[17]: True gdict[2.3] Out[18]: 2.3# easydict(屬于普通dict的子類,isinstance(tdict, dict)為True) # (k, v) # k只能是str # v為edict/任意類型 # 通過edict.?.?...或edict[?][?]...訪問 from easydict import EasyDict as edict tdict = edict() tdict['sss'] = 'sss' tdict.ttt = 'ttt' 'sss' in tdict Out[24]: True 'ttt' in tdict Out[25]: True tdict['sss'], tdict['ttt'], tdict.sss, tdict.ttt Out[26]: ('sss', 'ttt', 'sss', 'ttt')isinstance(gdict, dict), isinstance(gdict, edict) Out[31]: (True, False) isinstance(tdict, dict), isinstance(tdict, edict) Out[32]: (True, True)實例
# ttt.yaml NORMALIZE: True DATASET:NAME:A: 8B: 9 # ttt.py from easydict import EasyDict as edict import yamldef _update_dict(cfg, value, only_update=False, keep_normal=[]):"""將源edict更新到目的edict:param cfg: 目的edict對象:param value: 源edict對象:param only_update: 僅更新不插入,不存在k時報錯:param keep_normal: 當k in keep_normal,則將v直接賦值給cfg[k](即使v為edict):return:"""for k, v in value.items():if only_update:if k not in cfg:raise ValueError("{} not exist in config.py".format(k))else:if isinstance(v, edict) and k not in keep_normal:_update_dict(cfg[k], v, only_update, keep_normal)else:cfg[k] = velse:if isinstance(v, edict) and k not in keep_normal:if k not in cfg:cfg[k] = edict()_update_dict(cfg[k], v, only_update, keep_normal)else:cfg[k] = vdef update_config(cfg, config_file, only_update=False, keep_normal=[]):"""將配置文件更新到cfg:param cfg: 目的edict對象:param config_file: yaml文件路徑:param only_update: 僅更新不插入,不存在k時報錯:param keep_normal: 當k in keep_normal,則將v直接賦值給cfg[k](即使v為edict):return:"""with open(config_file) as f:exp_config = edict(yaml.load(f, Loader=yaml.FullLoader))_update_dict(cfg, exp_config, only_update, keep_normal)# 插入模式,不存在的鍵將插入值,存在的鍵將更新值 cfg = edict() update_config(cfg, 'ttt.yaml') print(cfg) # {'NORMALIZE': True, 'DATASET': {'NAME': {'A': 8, 'B': 9}}}# 更新模式,必須保證存在鍵 cfg = edict() cfg.NORMALIZE = None cfg.DATASET = edict() cfg.DATASET.NAME = edict() cfg.DATASET.NAME.A = None cfg.DATASET.NAME.B = None update_config(cfg, 'ttt.yaml', only_update=True) print(cfg) # {'NORMALIZE': True, 'DATASET': {'NAME': {'A': 8, 'B': 9}}}# 更新模式,但將cfg.DATASET的值作為普通元素而非edict進行下級插入/更新 cfg = edict() cfg.NORMALIZE = None cfg.DATASET = None update_config(cfg, 'ttt.yaml', only_update=True, keep_normal=['DATASET']) print(cfg) # {'NORMALIZE': True, 'DATASET': {'NAME': {'A': 8, 'B': 9}}}總結(jié)
以上是生活随笔為你收集整理的yamleasydict作为参数文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定制开发小程序流程
- 下一篇: 开发小程序和上线需要哪些费用