在python中读取YAML配置文件并使用变量

时间:2016-07-15 20:34:46

标签: python yaml config

说我有一个yaml配置文件,例如:

test1:
    minVolt: -1
    maxVolt: 1
test2:
    curr: 5
    volt: 5

我可以使用:

将文件读入python
import yaml

with open("config.yaml", "r") as f:
    config = yaml.load(f)

然后我可以用

访问变量
config['test1']['minVolt']

样式方面,从配置文件中使用变量的最佳方法是什么?我将在多个模块中使用变量。如果我只是如上所示访问变量,如果重命名某些内容,我将需要重命名该变量的每个实例。

只是想知道在不同模块中使用配置文件中的变量的最佳或常见做法。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

class Test1Class:
    def __init__(self, raw):
        self.minVolt = raw['minVolt']
        self.maxVolt = raw['maxVolt']

class Test2Class:
    def __init__(self, raw):
        self.curr = raw['curr']
        self.volt = raw['volt']

class Config:
    def __init__(self, raw):
        self.test1 = Test1Class(raw['test1'])
        self.test2 = Test2Class(raw['test2'])

config = Config(yaml.safe_load("""
test1:
    minVolt: -1
    maxVolt: 1
test2:
    curr: 5
    volt: 5
"""))

然后使用以下命令访问您的值:

config.test1.minVolt

重命名YAML文件中的值时,只需在一个位置更改类。

注意: PyYaml还允许您直接将YAML反序列化为自定义类。但是,要使其工作,您需要向YAML文件添加标记,以便PyYaml知道要反序列化的类。我希望你不要让你的YAML输入更复杂。

答案 1 :(得分:0)

请参见MunchLoad YAML as nested objects instead of dictionary in Python

import yaml
from munch import munchify
c = munchify(f)yaml.safe_load(…))
print(c.test1.minVolt)
# -1
# Or
f = open(…)
c = Munch.fromYAML(f)