我正在寻找可以像这样处理.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 来实现此目的,而无需创建自定义包。可以使用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 文件,迭代项目,并用环境变量值替换占位符。