我有一个带有以下参数的参数解析器,它允许我指定
--configs
这将覆盖配置文件中可能指定的值。
parser.add_argument('--configs', nargs='*', default=[])
我的愿望是具体说明
--配置
格式为
k=v
例如-
python my-app --configs foo=bar a.b.c=ddd
然后在我的应用程序中,我希望将指定的值保存到字典中。使用上面的例子,字典应该输出如下-
{'foo': 'bar', 'a': {'b': {'c': 'ddd'}}}
然而,我正在努力将该值转换为字典结构,结果却得到了一个不正确的字典-
{'foo': 'bar', 'a': {}, 'b': {}, 'c': 'ddd'}
到目前为止,我有以下几点。我如何修改我的代码,以创建(或更新)正确的字典结构?
import argparse
import yaml
parser = argparse. ArgumentParser()
parser.add_argument('--config-file', help='Configuration file path.')
parser.add_argument('--configs', nargs='*', default=[], help='Configuration settings.')
args = parser.parse_args()
if args.config_file:
with open(args.config_file, 'r') as f:
master_config = yaml.safe_load(f)
else:
master_config = {}
for config in args.configs:
k, v = config.split('=', 1)
ks = k.split('.')
try:
import json
v = json.loads(v)
except json.decoder.JSONDecodeError as e:
pass
l = len(ks)
for i, x in enumerate(ks):
if i != l-1:
if not master_config.get(x):
master_config[x] = {}
else:
master_config[x] = v
print(master_config)