有处理配置模板的python包吗?

问题描述 投票:0回答:1

我正在寻找可以像这样处理.yaml配置的库(python包)

config:
  - name: "Value"
  - age: "${ENV_VARIABLE_NAME}"

环境变量包含一些值(例如

ENV_VARIABLE_NAME=12

我想要这样的结果:

config: dict = yaml_reader.read("config_path.yaml")
print(config) # {"name": "Value", "age": 12)

是否有适合我的任务的 python 包(或类似的 json 包)?或者我应该创建我的自定义包?

python yaml configuration-files
1个回答
0
投票

是的,您可以使用 Python 来实现此目的,而无需创建自定义包。可以使用pyyaml库读取YAML文件,也可以使用Python内置的os库读取环境变量。 os.environ 对象是一个类似字典的对象,允许您访问环境变量。您还可以使用 Python 字符串的格式方法或 f-strings (Python 3.6+) 将环境变量中的值替换为 YAML 字符串。

以下是如何执行此操作的基本示例,假设 YAML 是映射下的序列:

import os
import yaml

# Set environment variable
os.environ['ENV_VARIABLE_NAME'] = '12'

with open('config_path.yaml', 'r') as file:
    # Load YAML file
    config = yaml.safe_load(file)
    
    # Iterate over items in the 'config' mapping and replace placeholders with environment variables.
    for key, value in config['config'].items():
        if isinstance(value, str) and value.startswith("${") and value.endswith("}"):
            env_var = value[2:-1]  # Extract the environment variable name
            config['config'][key] = os.environ.get(env_var, value)  # Replace with environment variable if it exists

print(config)

config_path.yaml 包含:

config:
  name: "Value"
  age: "${ENV_VARIABLE_NAME}"

这将打印:

{'config': {'name': 'Value', 'age': '12'}}

如果未找到环境变量,它将保留原值。

安装pyyaml

要使用 pyyaml,如果尚未安装,则需要安装它,可以使用 pip 来完成:

pip install pyyaml

JSON

如果您正在使用 JSON,则可以以类似的方式使用 Python 中内置的 json 库。过程是相同的:加载 JSON 文件,迭代项目,并用环境变量值替换占位符。

© www.soinside.com 2019 - 2024. All rights reserved.