博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yaml文件嵌套
阅读量:4183 次
发布时间:2019-05-26

本文共 1187 字,大约阅读时间需要 3 分钟。

python的pyyaml包中yaml嵌套还是基于在load中重载一个钩子类,对yaml的value进行解析处理。

具体的看以下代码:

#!/usr/bin/pythonimport os.pathimport yamlclass IncludeLoader(yaml.Loader):    def __init__(self, *args, **kwargs):        super(IncludeLoader, self).__init__(*args, **kwargs)        self.add_constructor('!include', self._include)        if 'root' in kwargs:            self.root = kwargs['root']        elif isinstance(self.stream, file):            self.root = os.path.dirname(self.stream.name)        else:            self.root = os.path.curdir    def _include(self, loader, node):        oldRoot = self.root        filename = os.path.join(self.root, loader.construct_scalar(node))        self.root = os.path.dirname(filename)        data = yaml.load(open(filename, 'r'))        self.root = oldRoot        return dataclass Config(object):    def __init__(self, path):        config_file = open(path, 'r')        self.config_content = yaml.load(config_file, IncludeLoader)        config_file.closed    def getConfigContent(self):        return self.config_content

通过pycharm跳入yaml.load,一直追到construct_object可以发现有如下部分:

可以看到是通过value前缀判定的!注意下面的a:后面要有一个空格。所以配置文件包含的格式如下:

cat total.yaml 

a: !include a.yaml
b: !include b.yaml

 

转载地址:http://sauoi.baihongyu.com/

你可能感兴趣的文章
垃圾回收器学习之Full GC和CMS GC的区别
查看>>
Java JUnit 单元测试小结
查看>>
volatile关键字解析
查看>>
nginx upstream failover 容错机制
查看>>
java中,创建子类对象时,父类对象会也被一起创建么?
查看>>
nginx配置 -- 让匹配路径不作为文件目录的一部分
查看>>
Redis为什么是单线程的?
查看>>
Treiber Stack介绍
查看>>
FutureTask源码解读
查看>>
Redis架构之防雪崩设计:网站不宕机背后的兵法
查看>>
使用BloomFilter布隆过滤器解决缓存击穿、垃圾邮件识别、集合判重
查看>>
BloomFilter布隆过滤器使用
查看>>
YoungGC 停顿超长时间
查看>>
近千节点的Redis Cluster高可用集群案例:优酷蓝鲸优化实战
查看>>
Redis系列一:reids的单机版安装
查看>>
Redis系列二:reids介绍
查看>>
Redis系列三:reids常用命令
查看>>
Redis系列四:redis支持的数据类型
查看>>
Redis系列五:redis键管理和redis数据库管理
查看>>
Redis系列六:redis相关功能
查看>>