我是Python初学者。
我想知道Argparse和JSON是否可以一起使用。
比如,我有变量p,q,r
我可以把它们作为-
parser.add_argument('-p','--param1',help='x variable', required=True)
parser.add_argument('-q','--param2',help='y variable', required=True)
parser.add_argument('-r','--param3',help='z variable', required=True)
现在假设我想从JSON文件中读取相同的变量,有可能吗? 所以我可以从命令行或JSON文件中输入值。
JSON输入文件-
{
"testOwner": "my name",
"tests": [
"test1",
"test2",
"test3"
],
"testParameters": {
"test1": {
"param1": "0",
"param2": "20",
"param3" : "True"
},
"test2": {
"param1": "cc"
}
}
}
来自
parse_args
的args
命名空间可以转换为具有以下内容的字典:JSON值也在字典中,比如
json_dict
。您可以将选定的值从一个字典复制到另一个字典,或执行整个刻度更新:这样,
json_dict
值就会覆盖argparse值。如果要同时保留这两个值,则需要使用不同的参数(键)名称,或者值必须是列表,可以附加或扩展列表。这需要更多的工作,首先在
argparse
中使用正确的nargs
值。修改后的
parser
生成一个测试输入:解析时的JSON字符串(
json.loads
?)生成如下词典:我是通过将您的显示粘贴到我的Ipython会话中来实现这一点的,但是我认为JSON加载程序也会产生同样的结果
argparse值可以添加为:
在这里,我将它添加为第三个
test
集,从tests
列表中获取一个名称(根据conincidence)。json_dict['testParameters']['test2']=args_dict
将替换test2
的值。将args值添加到“test2”的未定义值的一种方法是:
我使用这个版本的
update
优先考虑JSON字典中的'cc'值。假设您的JSON文件包含以下格式的dict:
创建解析器之后,您可以像这样“解包”dict:
但是,这会迫使您维护dict键以适合方法
add_arguments
的参数名。您也没有一个简单/直接的方法来使用更高级的行为,比如使用action
、type
、choices
参数。此外,还必须更改dict的格式,以包含要使用的各种参数。一种解决方案是将名称/标志作为元组中dict的键,而参数将是dict:
编辑 考虑到来自OP的注释,他似乎希望解析取自JSON文件的值。
编辑2
看看
argparse
文档this paragraph可能有点相关。相关问题 更多 >
编程相关推荐