Python argparse对象与dict对象的相互转化

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、引言

        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对象 - 文件 读写这篇博客。

        这样我们可以从argparsedict(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对象的文件读写操作

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python