python中yaml文件之间、文件内部相互引用 您所在的位置:网站首页 怎么引用文件内容 python中yaml文件之间、文件内部相互引用

python中yaml文件之间、文件内部相互引用

2024-07-18 06:23| 来源: 网络整理| 查看: 265

1.目录结构

|--------a             |----a.yaml             |----b.yaml |--------c             |----c.yaml |--------yaml_include.py

2.代码实现yaml_include.py import yaml import os.path class Loader(yaml.Loader): def __init__(self, stream): self._root = os.path.split(stream.name)[0] super(Loader, self).__init__(stream) def include(self, node): filename = os.path.join(self._root, self.construct_scalar(node)) with open(filename, 'r') as fr: return yaml.load(fr, Loader) Loader.add_constructor('!include', Loader.include) def load_yaml(file_name): """Load YAML file to be dict""" if os.path.exists(file_name): with open(file_name, 'r', encoding="utf-8") as fr: dict_obj = yaml.load(fr, Loader=Loader) return dict_obj else: raise FileNotFoundError('NOT Found YAML file %s' % file_name) if __name__ == '__main__': yaml_dict = load_yaml("a/a.yaml") print(yaml_dict) 3.yaml文件之间相互引用

a.yaml

name: demo hobby: !include ./b.yaml # 引用当前目录下yaml文件 skill: !include ../c/c.yaml # 引用非当前目录下的yaml文件

b.yaml

- basketball - Table-Tennis - swim

c.yaml

- python - java - shell - linux

打印结果:

{ "hobby": ["basketball", "Table-Tennis", "swim"], "name": "demo", "skill": ["python", "java", "shell", "linux"] } 4.yaml文件内部引用

a.yaml

name: demo maodiao1: &maodian1 # &符号标记锚点1 a: 1 b: 2 maodiao2: &maodian2 # &符号标记锚点2 aa: 11 bb: 22 haha:


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有