yaml文件里引用yaml文件

a.yaml文件内容:

a: 1
b:
- 2
- 3
c: !include b.yaml

b.yaml文件内容:

- 10
- [100, 200, 300]

python代码

# 基于类的解决方案,使用元类注册自定义构造函数。

import yaml
import os
import os.path

# 项目路径
project_path =os.path.split(os.path.realpath(__file__))[0].split('tools')[0]

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 f:
            return yaml.load(f, Loader)

Loader.add_constructor('!include',Loader.include)

def get_yaml_data(fileDir):
    """
    读取 test.yaml 文件内容
    :param fileDir:
    :return:
    """
    # 1、在内存里加载这个文件
    # f = open(fileDir, 'r', encoding='utf-8')
    with open('a.yaml','r') as f:
        data = yaml.load(f, yaml.Loader)
    print(data)

    # 2、调用yaml读取文件
    # Loader=yaml.FullLoader 更加安全
    res = yaml.load(f, Loader=yaml.FullLoader)
    return res

if __name__ == '__main__':
    info = get_yaml_data(project_path + r'\test.yaml')
    print(info)

# 输出:
# {'a': 1,'b': [2, 3],'c': [10, [100,200, 300]]}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢同学.

但行好事 莫问前程

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值