将 YAML 配置值输入到 Python 的关键字参数中

Jam*_*mes 7 python pyyaml python-3.x

我想要一个 YAML 配置文件,用于我的 Python 脚本的某些分析设置。YAML 文件看起来像这样:

settings:
  param1: 1
  param2: two
  ...
Run Code Online (Sandbox Code Playgroud)

在我的 Python 脚本中,我想将这些值作为关键字参数传递给函数。加载 YAML 文件会为我提供一本字典。该函数只有关键字参数,我事先不知道配置文件将具有哪些关键字参数。该函数看起来像这样:

def process(param1=None, param2=None, param3=None):
    ...
Run Code Online (Sandbox Code Playgroud)

请注意,YAML 设置的名称与关键字参数名称相同。该函数有几个可能的关键字参数,而配置文件可能只有一两个。显然,我想将值分配给正确的关键字参数。

如何将 YAML 值(和/或字典)分配给它们的关键字参数分配?

not*_*.no 3

您可以从中获取字典yaml.load()并使用**语法将键/值传递到函数中。这样您就不必事先知道密钥。例如:

import yaml

with open('path/to/config.yml', 'rb') as f:
    conf = yaml.safe_load(f.read())    # load the config file

def process(**params):    # pass in variable numbers of args
    for key, value in params.items():
        print('%s: %s' % (key, value))

process(**conf)    # pass in your keyword args
Run Code Online (Sandbox Code Playgroud)

用您的代码尝试一下,它应该能让您充分了解如何实现您自己的代码。