将 YAML 配置值输入 Python 的关键字参数
Input YAML config values into keyword arguments for Python
我想要一个 YAML 配置文件,用于我的 Python 脚本的某些分析设置。 YAML 文件看起来像这样:
settings:
param1: 1
param2: two
...
在我的 Python 脚本中,我想将这些值作为关键字参数传递给函数。加载 YAML 文件会给我一本字典。该函数只有关键字参数,我事先不知道配置文件将具有哪些关键字参数。该函数看起来像这样:
def process(param1=None, param2=None, param3=None):
...
请注意,YAML 设置的名称与关键字参数名称相同。该函数有几个可能的关键字参数,而配置文件可能只有一两个。显然,我想将值分配给正确的关键字参数。
如何将 YAML 值(and/or 字典)分配给关键字参数分配?
您可以遍历 python 中字典中的键,如:
for key in data:
print(key)
这将允许您获取密钥并通过调用在您的函数中使用它:
data[key] # returns value from dict
您可以从 yaml.load()
获取字典并使用 **
语法将 key/values 传递给函数。这样您就不必事先知道密钥。例如:
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
用你的代码试试这个,它应该会让你对如何实现自己的代码有足够的了解。
所以,我 运行 向你提问,我认为这可能会有所帮助。 PyYAML 很棒!它支持的一件事是 class 直接从 python
映射
import yaml
class Hero:
def __init__(self, name, hp, sp):
self.name = name
self.hp = hp
self.sp = sp
def __repr__(self):
return "Hero %s has %d Hitpoints" % (self.name, self.hp)
f = "sample.yml"
with open(f, mode='w') as ff:
ff.write(yaml.dump(Hero(name="Cool Guy", hp=4, sp=10)))
# saves as !!python/object:__main__.Hero {hp: 4, name: Cool Guy, sp: 10}
ff.close()
with open(f, mode="r") as fx:
y = yaml.load(fx)
print(y)
[out]: Hero Cool Guy has 4 Hitpoints
希望你能像我一样发现它的用处。查看 PyYAML Docs 了解更多信息。
我想要一个 YAML 配置文件,用于我的 Python 脚本的某些分析设置。 YAML 文件看起来像这样:
settings:
param1: 1
param2: two
...
在我的 Python 脚本中,我想将这些值作为关键字参数传递给函数。加载 YAML 文件会给我一本字典。该函数只有关键字参数,我事先不知道配置文件将具有哪些关键字参数。该函数看起来像这样:
def process(param1=None, param2=None, param3=None):
...
请注意,YAML 设置的名称与关键字参数名称相同。该函数有几个可能的关键字参数,而配置文件可能只有一两个。显然,我想将值分配给正确的关键字参数。
如何将 YAML 值(and/or 字典)分配给关键字参数分配?
您可以遍历 python 中字典中的键,如:
for key in data:
print(key)
这将允许您获取密钥并通过调用在您的函数中使用它:
data[key] # returns value from dict
您可以从 yaml.load()
获取字典并使用 **
语法将 key/values 传递给函数。这样您就不必事先知道密钥。例如:
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
用你的代码试试这个,它应该会让你对如何实现自己的代码有足够的了解。
所以,我 运行 向你提问,我认为这可能会有所帮助。 PyYAML 很棒!它支持的一件事是 class 直接从 python
映射import yaml
class Hero:
def __init__(self, name, hp, sp):
self.name = name
self.hp = hp
self.sp = sp
def __repr__(self):
return "Hero %s has %d Hitpoints" % (self.name, self.hp)
f = "sample.yml"
with open(f, mode='w') as ff:
ff.write(yaml.dump(Hero(name="Cool Guy", hp=4, sp=10)))
# saves as !!python/object:__main__.Hero {hp: 4, name: Cool Guy, sp: 10}
ff.close()
with open(f, mode="r") as fx:
y = yaml.load(fx)
print(y)
[out]: Hero Cool Guy has 4 Hitpoints
希望你能像我一样发现它的用处。查看 PyYAML Docs 了解更多信息。