python - 如何加载 pyYAML 文件并使用属性而不是使用字典符号访问它?

标签 python yaml pyyaml

我有一个 YAML 配置,如下所示:

config:
 - id: foo
 - name: bar
content:
 - run: xxx
 - remove: yyy

我正在使用 Python YAML 模块来加载它,但我想以更好的方式访问它,例如:

stream = open(filename)
config = load(stream, Loader=Loader)
print(config['content'])

我想要的是能够做到:print(config.content)

最佳答案

您可以使用以下类在字典中使用对象表示法,如 this 中所述回答:

class DictAsMember(dict):
    def __getattr__(self, name):
        value = self[name]
        if isinstance(value, dict):
            value = DictAsMember(value)
        return value

这个类在行动:

>>> my_dict = DictAsMember(one=1, two=2)
>>> my_dict
{'two': 2, 'one': 1}
>>> my_dict.two
2

编辑 这对子词典递归地起作用,例如:

>>> my_dict = DictAsMember(one=1, two=2, subdict=dict(three=3, four=4))
>>> my_dict.one
1
>>> my_dict.subdict
{'four': 4, 'three': 3}
>>> my_dict.subdict.four
4

关于python - 如何加载 pyYAML 文件并使用属性而不是使用字典符号访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11049117/

相关文章:

python - 如何用flask和docker部署rabbitmq?

python 多个QInputDialog

ansible - 使用 Jinja2 dict 作为 Ansible 模块选项的一部分

yaml - 指定 PyYAML 转储部分的样式

java - PyYaml 到 SnakeYaml --- AWT-EventQueue- 0"Can' t 为标签 :yaml. org,2002:java/object 构造一个 java 对象:

Python 从 YAML 解析类

Python tryexcept 用于用 "-"进行分割

python - Python 3.2 中的外来字符

javascript - 如何在 Rails 应用程序中通过 javascript 引用 yaml 文件中的字符串?

java - 如何在 Java 中优雅地序列化和反序列化 OpenCV YAML 校准数据?