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

cam*_*usb 6 python yaml config

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

test1:
    minVolt: -1
    maxVolt: 1
test2:
    curr: 5
    volt: 5
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令将文件读取到python中:

import yaml

with open("config.yaml", "r") as f:
    config = yaml.load(f)
Run Code Online (Sandbox Code Playgroud)

然后我可以使用

config['test1']['minVolt']
Run Code Online (Sandbox Code Playgroud)

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

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

fly*_*lyx 5

你可以这样做:

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
"""))
Run Code Online (Sandbox Code Playgroud)

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

config.test1.minVolt
Run Code Online (Sandbox Code Playgroud)

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

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