我正在使用YAML配置文件.所以这是在Python中加载我的配置的代码:
import os
import yaml
with open('./config.yml') as file:
config = yaml.safe_load(file)
Run Code Online (Sandbox Code Playgroud)
此代码实际上创建了一个字典.现在的问题是,为了访问值,我需要使用大量的括号.
YAML:
mysql:
user:
pass: secret
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
import os
import yaml
with open('./config.yml') as file:
config = yaml.safe_load(file)
print(config['mysql']['user']['pass']) # <--
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样的东西(点符号):
config('mysql.user.pass')
Run Code Online (Sandbox Code Playgroud)
所以,我的想法是利用PyStache render()接口.
import os
import yaml
with open('./config.yml') as file:
config = yaml.safe_load(file)
import pystache
def get_config_value( yml_path, config ):
return pystache.render('{{' + yml_path + '}}', config)
get_config_value('mysql.user.pass', config)
Run Code Online (Sandbox Code Playgroud)
这会是一个"好"的解决方案吗?如果没有,什么是更好的选择?
附加问题[已解决]
我决定使用IljaEverilä的解决方案.但现在我还有一个问题:你如何在DotConf周围创建一个包装器Config类?
以下代码不起作用,但我希望您了解我正在尝试做的事情:
class Config( DotDict ):
def __init__( self ):
with open('./config.yml') as file: …Run Code Online (Sandbox Code Playgroud)