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

     2023-02-23     35

关键词:

【中文标题】在 python 中读取 YAML 配置文件并使用变量【英文标题】:Reading YAML config file in python and using variables 【发布时间】:2016-11-19 04:00:36 【问题描述】:

假设我有一个 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']

风格方面,使用配置文件中的变量的最佳方式是什么?我将在多个模块中使用变量。如果我只是简单地访问如上所示的变量,如果某些东西被重命名,我将需要重命名变量的每个实例。

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

【问题讨论】:

【参考方案1】:

你可以这样做:

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 输入变得更复杂。

【讨论】:

另一个问题,当使用 GUI 界面时。我有一个带有配置设置的选项卡,用户可以在其中编辑配置文件。我能够覆盖 yaml 配置文件,但是当访问另一个模块中的变量时(在变量更新后),该模块仍然使用原始值。只有在我退出 GUI 并重新启动程序后,它才会使用新值。为什么会这样,我该如何解决? 如果此答案解决了您的问题,请标记为这样。如果您还有其他问题,请创建一个新问题来显示您的代码并描述您的问题,而不是在此处发表评论。【参考方案2】:

见Munch、Load 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)

【讨论】:

python读取yaml文件

简介在实际开发过程中,我们可能需要读取一些配置文件的配置信息,例如ini、yaml、property等格式,本文将讲述怎么去获取和设置yaml文件的相关参数。示例yaml文件test1:test2-1:5test2-2:130000test2-3:test3-1:123test 查看详情

在 Python 中解析 YAML 文件并访问数据?

】在Python中解析YAML文件并访问数据?【英文标题】:ParsingaYAMLfileinPython,andaccessingthedata?【发布时间】:2011-12-2823:40:06【问题描述】:我是YAML新手,一直在寻找解析YAML文件和使用/访问解析后的YAML数据的方法。我遇到过关于如何... 查看详情

在脚本中使用应用引擎 yaml 解析器

...配置文件,我想用yaml编写并在运行在Google应用引擎上的Python脚本中读取。鉴于应用引擎使用app.yaml、index.yaml等,假设有可用的pythonyaml解析器似乎是合理的。我怎样才能访问这个解析器(什么是导入)以及在哪里可以找到它的 查看详情

Spring Boot 无法从配置文件特定的 yaml 文件中读取

】SpringBoot无法从配置文件特定的yaml文件中读取【英文标题】:Springbootunabletoreadfromprofilespecificyamlfile【发布时间】:2018-03-0506:15:34【问题描述】:我在玩springboot并试图创建一个配置文件特定的配置文件。我叫它application-local.yml... 查看详情

python配置文件管理之ini和yaml文件读取(代码片段)

...,我想与大家分享一些配置管理的良好实践,以及如何在Python中实现它们。闲话少说,我们直接开始吧!如何选择配置文件的格式事实上,只要代码能够读取和解析配置文件的内容,那么配置文件的格式就没有任何限制。但是,... 查看详情

读取python的yaml配置文件(代码片段)

我正在尝试读取YAML配置文件并将其显示给终端。现在,我想尝试诸如检查YAML文件中的数据库(db)不是Sqlite还是Postgres的操作,然后会引发异常,但我不知道如何。我尝试了但失败了,我在做什么错?我的test.yaml文件:db:mysqldbop... 查看详情

如何使用 YAML 文件在 Spring Boot 中配置 Swagger?

】如何使用YAML文件在SpringBoot中配置Swagger?【英文标题】:HowtoconfigureSwaggerinSpringBootusingYAMLfile?【发布时间】:2018-11-2912:41:31【问题描述】:我的Swagger配置有问题。现在Swagger正在扫描包并创建漂亮的文档,但我想使用我的YAML(... 查看详情

AppEngine:从 app.yaml 读取值/设置

...2:21【问题描述】:是否可以从我的app.yaml配置文件中读取Python中的设置?【问题讨论】:【参考方案1】:没有;app.yaml默认不会上传到你的应用目录。您可以在项目目录中使用不同的文件名对其进行符号链接,然后在确实需要时... 查看详情

spring boot 配置多个yaml文件并根据env参数加载

...的application.yaml文件。使用java类文件中的注解映射属性以读取值@Configur 查看详情

如何从 electron-builder yaml 配置文件中的 .env 文件中读取?

】如何从electron-builderyaml配置文件中的.env文件中读取?【英文标题】:Howtoreadfrom.envfileinelectron-builderyamlconfigfile?【发布时间】:2020-11-1001:01:45【问题描述】:我是电子新手。我有一个用电子包裹的角度应用程序,我想使用electron-... 查看详情

使用 Python 更改 yaml 文件中的值

】使用Python更改yaml文件中的值【英文标题】:ChangingavalueinayamlfileusingPython【发布时间】:2017-04-0708:09:16【问题描述】:我有一个要使用Python代码更新的.yaml文件。假设它看起来像这样:state:\'present\'我想要一个更改状态并保存文... 查看详情

如何在 Python 中使用 ruamel.yaml 从 YAML 文件中获取注释?

】如何在Python中使用ruamel.yaml从YAML文件中获取注释?【英文标题】:HowcanIgetcommentsfromaYAMLfileusingruamel.yamlinPython?【发布时间】:2016-11-1004:29:54【问题描述】:我想从使用ruamel.yaml加载的YAML文件中获取注释字符串。projectdocumentation... 查看详情

在 Spring application.yaml 中读取 docker env 变量

】在Springapplication.yaml中读取dockerenv变量【英文标题】:ReaddockerenvvariableinsideSpringapplication.yaml【发布时间】:2020-07-0104:45:09【问题描述】:我正在我的docker-compose.yaml文件中设置一个环境变量,并希望在我的SpringBoot的application.yaml... 查看详情

如何将 YAML 文件解析/读取到 Python 对象中?

】如何将YAML文件解析/读取到Python对象中?【英文标题】:Howtoparse/readaYAMLfileintoaPythonobject?【发布时间】:2011-10-1513:07:48【问题描述】:例如,这个YAML:Person:name:XYZ到这个Python类:classPerson(yaml.YAMLObject):yaml_tag=\'Person\'def__init__(sel... 查看详情

python基础10--yaml文件的写法与使用

参考技术Ayaml是专门用来写配置文件的语言yaml文件其实也是一种配置文件类型,后缀名是.yaml或.yml都可以个人认为比yaml比json格式更方便cmd执行pipinstallpyyaml装的时候要用pyyaml,实际使用时直接importyaml即可短横线加一个空格(-)... 查看详情

2019-05-30python+jinja2+yaml批量生成配置

参考技术A目前来看,Python+yaml+Jinja2是非常方便生成批量配置的组合,在运维工作中用于批量生成设备的基础配置。这里我的案例是配置一批交换机,基础配置不同的地方有:loopback地址(IPV4和IPV6),设备名称,ISIS网络号,至于... 查看详情

如何在 Silex 框架中使用 YAML 配置文件

】如何在Silex框架中使用YAML配置文件【英文标题】:HowtouseaYAMLconfigfileinSilexFramework【发布时间】:2011-11-2103:27:43【问题描述】:是否可以使用YAML配置文件配置Silex应用程序?我打赌是的,但它是如何正确完成的?比如我想根据环... 查看详情

如何从 python 中的嵌套 YAML 文件中读取数据?

】如何从python中的嵌套YAML文件中读取数据?【英文标题】:HowtoreaddatafromnestedYAMLfileinpython?【发布时间】:2020-07-0513:56:24【问题描述】:我有例如swagger.yaml文件,我想从中读取一些变量。例如那个文件:https://editor.swagger.io/下面... 查看详情