python如何实现在A.yaml内再嵌套B.yaml文件的读取
利用PyYAML包读取yaml文件后,生成dict或list对象,内部可以包含 dict 和 list 对象,我们需要匹配父yaml文件里的所有值,判断哪些值是嵌套的子yaml文件对象,再将子yaml读取到父yaml上。具体操作:
定义父yaml father.yaml
a1: a1
b1:
type: include_yaml #确定include_yaml 类型为嵌套文件
file: "./childer.yaml" # 嵌套子yaml路径
c1:
- type: include_yaml
file: "./childer.yaml"
- type: include_yaml
file: "./childer.yaml"
定义子yaml childer.yaml
c1: c1
d1: d1
编写嵌套方法 include_yaml.py
import yaml
with open('./father.yaml','r') as f:
father_yaml = yaml.load(f,Loader=yaml.FullLoader)
def include_yaml(yaml_):
if isinstance(yaml_,dict):
yaml_copy = yaml_.copy()
if yaml_.get('type')=='include_yaml':
with open(yaml_.get('file'),'r') as f:
childer_yaml = yaml.load(f,Loader=yaml.FullLoader)
yaml_copy = childer_yaml.copy()
else:
for k1,v1 in yaml_.items():
yaml_copy[k1] = include_yaml(v1)
elif isinstance(yaml_,list):
yaml_copy = [include_yaml(x) for x in yaml_].copy()
else:
yaml_copy = yaml_
# print(yaml_copy)
return yaml_copy
include_yaml(father_yaml)