Python argparse对象与dict对象的相互转化
一、引言
Python argparse是Python内置的、用于命令项选项与参数解析的模块,该模块可以让人轻松编写用户友好的命令行接口,能够帮助程序员为模型定义参数。
应用场景举例。例如,你写了一份Python代码,该代码有一些参数在我的程序中无法确定,而是要等到你去调用Python文件执行时才可以确定。这时,你就可以通过argparse来大展身手。
使用举例。当你为你的Python程序定义好一些参数列表之后,你可以调用下面的脚本/命令来执行你的Python程序:
python a_code.py --name "JACK Williams" --height 175.6 --weight 75
其中“a_code.py”是你写的Python程序,“name”、“height”和“weight”是你的程序所需要用到的参数,且这些参数的值需要在执行时才能确定。
由于我们经常会用到argparse这个Python自带库,所以在程序中如果出现很多参数时,我们难免会想要通过保存成文件的方式来存住这些参数,这样,如果程序下次还需要调用这些参数,我们就可以快速地、自动地、高效地得到这些曾经输入过的参数值。
所以,这篇博客提供了argparse对象和dict对象相互转换的方法。如果你想要保存这些参数和参数值到文件,就可以先将argparse转为dict对象(这也可以认为是简版json对象,因为dict只有键值对),然后再将dict对象通过Python自带的json库来将其保存到文件中去。对于json对象的文件读写,可以参考Python json对象 - 文件 读写这篇博客。
这样,我们可以从argparse到dict(json)再到文件,也可以从文件到dict(json)再到argparse。
二、argparse转dict
思路:在Python程序中定义好参数列表,然后从终端读取参数列表得到argparse对象,然后将该对象转化为dict对象。
1、代码:在Python程序中定义好参数列表(也包括了argparse到dict的转换),这里对应的Python程序文件名为“args2dict.py”
import argparse
# define arguments
def parse_args(args=None):
parser = argparse.ArgumentParser()
parser.add_argument('--Name', type=str)
parser.add_argument('--ID', type=int)
parser.add_argument('--At_School', type=bool)
parser.add_argument('--Math_Score', type=float)
return parser.parse_args(args)
# program entrance
if __name__ == '__main__':
# read args from the terminal
an_args = parse_args()
# transfer the args to a dict
args_dict = vars(an_args)
# use the dict
for k in args_dict.keys():
print(k, args_dict[k], type(args_dict[k]))
2、在终端中执行“args2dict.py”时输入参数列表,完了以后程序会自动将参数列表转成dict对象
python args2dict.py --Name "JACK Williams" --ID 391568 --At_School true --Math_Score 95.6
3、程序的执行输出如下
Name JACK Williams <class 'str'>
ID 391568 <class 'int'>
At_School True <class 'bool'>
Math_Score 95.6 <class 'float'>
三、dict转argparse
思路:调用argparse的静态方法Namespace,自动将dict的键值对转化为argparse对象
代码
import argparse
# create a dict object
a_student = {'Name': 'JACK Williams',
'ID': 391568,
'At_School': True,
'Math_Score': 92.3}
# transfer the dict object to an ArgumentParser object
args = argparse.Namespace(**a_student)
# use the ArgumentParser object
print(args.Name, type(args.Name))
print(args.ID, type(args.ID))
print(args.At_School, type(args.At_School))
print(args.Math_Score, type(args.Math_Score))
该程序输出如下
JACK Williams <class 'str'>
391568 <class 'int'>
True <class 'bool'>
92.3 <class 'float'>
四、参考
1、以字典形式传入argparse的参数
2、Python使用json库进行json对象的文件读写操作