python的argparse参数解析

参考资料:

https://www.youtube.com/watch?v=cdblJqEUDNo&t=298s

不方便用梯子的也可以看B站:

Python argparse命令行参数解析包的详细使用说明书_哔哩哔哩_bilibili

以下是argparse笔记:

用法三步走:

①创建一个装参数的容器。

②往容器里面添加参数。

③解析容器里面的参数。

1.positional argument

特点:

①参数名前面没有横杠。

②不同的参数,输入的先后顺序不能改变。

③运行的时候不能输入参数名(输入参数名会报错),只需输入参数值。即:

python 文件名 参数值1 参数值2

以计算圆柱体积的代码为例。新建demo1.py。

import math
import argparse

parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
parser.add_argument('radius', type=int, help='Radius of Cylinder')
parser.add_argument('height', type=int, help='Height of Cylinder')
args = parser.parse_args()

def cylinder_volume(radius, height):
    vol = (math.pi) * (radius ** 2) * (height)
    return vol

if __name__ == '__main__':
    print (cylinder_volume(args.radius, args.height))

查看帮助信息,在终端输入:

python demo1.py -h

终端显示:

usage: demo1.py [-h] radius height

Calculate volume of a Cylinder    #parser定义的时候,description里面的内容

positional arguments:
  radius      Radius of Cylinder
  height      Height of Cylinder

optional arguments:
  -h, --help  show this help message and exit

计算  radius=2    height=4 的圆柱体积:

python demo1.py 2 4

结果:

50.26548245743669

交换一下参数输入的顺序:

python demo1.py 4 2

结果:

100.53096491487338
#计算的是 radius=4 height=2的圆柱体积

2.optional argument

特点:

①参数名之前有横杠。

②运行的时候要带参数值。即

python 文件名 参数名1 参数值1 参数名2 参数值2...

③参数值可以交换顺序,对运行结果没有影响。即 

python 文件名 参数名2 参数值2 参数名1 参数值1 ...

④因为输入的参数值可以交换顺序,所以输入的时候必须带上参数名,否则报错。

新建demo2.py

import math
import argparse

parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
parser.add_argument('--radius', type=int, help='Radius of Cylinder')#注意双横杠!
parser.add_argument('--height', type=int, help='Height of Cylinder')
args = parser.parse_args()

def cylinder_volume(radius, height):
    vol = (math.pi) * (radius ** 2) * (height)
    return vol

if __name__ == '__main__':
    print (cylinder_volume(args.radius, args.height))

查看帮助信息:

python demo2.py -h

显示

usage: demo2.py [-h] [--radius RADIUS] [--height HEIGHT]

Calculate volume of a Cylinder

optional arguments:
  -h, --help       show this help message and exit
  --radius RADIUS  Radius of Cylinder    #有横杠之后变成可选参数了!
  --height HEIGHT  Height of Cylinder

计算  radius=2    height=4 的圆柱体积:

python demo2.py --radius 2 --height 4

或者:

python demo2.py --height 4 --radius 2

输出都是 半径为2 高度为4 的圆柱体的体积!

50.26548245743669

注意,因为前面参数定义的时候是:

--radius  --height

所以后面参数调用的地方是:

args.radius  args.height

一定要对应起来哦!

不过每次都输入这么长的参数名太麻烦了,那就在参数定义的地方,再另外输入一个以单横杠开头的,简写的参数名。即:

parser.add_argument('-r', '--radius', type=int, help='Radius of Cylinder')

或者:

parser.add_argument('--radius', '-r',type=int, help='Radius of Cylinder')

--radius和-r完全等价,顺序可以交换,只需要注意,真正的参数名以双横杠开头,简写的参数名以单横杠开头。

把height这个参数也改一下。

parser.add_argument('-H', '--height', type=int, help='Height of Cylinder')

大写-H是因为,小写的-h已经被 帮助 占用啦!

计算  radius=2    height=4 的圆柱体积,以下八种参数输入方式完全等价:

python demo2.py -r 2 -H 4

python demo2.py -H 4 -r 2

python demo2.py --radius 2 --height 4

python demo2.py --height 4 --radius 2

python demo2.py --radius 2 -H 4

python demo2.py --H 4 --radius 2

python demo2.py -r 2 --height 4

python demo2.py --height 4 -r 2

输出都是:

50.26548245743669

再来完善一下~

help信息显示得有点乱,-r 后面紧跟的是RADIUS。

usage: demo2.py [-h] [-r RADIUS] [-H HEIGHT]

Calculate volume of a Cylinder

optional arguments:
  -h, --help            show this help message and exit
  -r RADIUS, --radius RADIUS
                        Radius of Cylinder
  -H HEIGHT, --height HEIGHT
                        Height of Cylinder

在添加参数的时候,写上metavar等于空字符串,就把原来的RADIUS  HEIGHT这些替换为空字符串了。上代码:

parser.add_argument('-r', '--radius', type=int, metavar='', help='Radius of Cylinder')
parser.add_argument('-H', '--height', type=int, metavar='', help='Height of Cylinder')

metavar=空字符串 也可以写在其他位置,只要写在参数名'-r', '--radius'之后即可。比如:

parser.add_argument('-r', '--radius', type=int, help='Radius of Cylinder', metavar='')
parser.add_argument('-H', '--height', type=int, metavar='', help='Height of Cylinder')

现在的help信息变得很整齐:

usage: demo2.py [-h] [-r] [-H]

Calculate volume of a Cylinder

optional arguments:
  -h, --help      show this help message and exit
  -r , --radius   Radius of Cylinder
  -H , --height   Height of Cylinder

如果运行代码的时候少输入了一个参数,那么会默认它是None,就会报错。比如:

python demo2.py -r 2

报错:

Traceback (most recent call last):
  File "/home/yukey/Documents/NLP_Code_All/argparse参数解析/demo2.py", line 22, in <me>
    print (cylinder_volume(args.radius, args.height))
  File "/home/yukey/Documents/NLP_Code_All/argparse参数解析/demo2.py", line 18, in cyer_volume
    vol = (math.pi) * (radius ** 2) * (height)
TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'

在添加参数的时候写上required=True,当缺少该参数的时候就会有提示了。同样地,required=True写在参数名后面的任意位置都可以。

parser.add_argument('-r', '--radius', type=int, help='Radius of Cylinder', metavar='', required=True)
parser.add_argument('-H', '--height', required=True, type=int, metavar='', help='Height of Cylinder')

输入:

python demo2.py -r 2

提示:

usage: demo2.py [-h] -r  -H
demo2.py: error: the following arguments are required: -H/--height

3.mutually exclusive group

互斥组,字面上理解就是一组参数,里面的参数关系是互斥的,只能有一个True,其余为False。

下面以设置三种输出格式为例,这三种情况是互斥的。

①quiet:只输出一个数字。

②verbose:输出很啰嗦的一串说明文字+数字。

③不指定互斥参数:输出一句话+数字。

新建demo3.py 上代码:

import math
import argparse

parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
parser.add_argument('-r', '--radius', required=True, type=int, metavar='', help='Radius of Cylinder')
parser.add_argument('-H', '--height', required=True, type=int, metavar='', help='Height of Cylinder')
group = parser.add_mutually_exclusive_group()
group.add_argument('-q', '--quiet', action='store_true', help='print quiet')
group.add_argument('-v', '--verbose', action='store_true', help='print verbose')
args = parser.parse_args()

def cylinder_volume(radius, height):
    vol = (math.pi) * (radius ** 2) * (height)
    return vol

if __name__ == '__main__':
    volume = cylinder_volume(args.radius, args.height)
    if args.quiet:    #指定-q
        print(volume)
    elif args.verbose:    #指定-v
        print("Volume of a Cylinder with radius %s and height %s and height %s is %s" % (args.radius, args.height, volume))
    else:    #既不指定-q 也不指定-v
        print("Volume of Cylinder = %s" % volume)

注意,新添加的group这个容器是在原来的parser的基础上再add mutually exclusive group,而不是另起炉灶!

其中action='store_true'的意思是,指定这个参数的时候,该参数就是True。博主的原话是:When you give it an action,it stores true. The default become False。

显示一下帮助信息:

python demo3.py -h

帮助信息如下:

usage: demo3.py [-h] -r  -H  [-q | -v]

Calculate volume of a Cylinder

optional arguments:
  -h, --help      show this help message and exit
  -r , --radius   Radius of Cylinder
  -H , --height   Height of Cylinder
  -q, --quiet     print quiet
  -v, --verbose   print verbose

指定-q:

python demo3.py -r 2 -H 4 -q

输出:

50.26548245743669

指定-v:

python demo3.py -r 2 -H 4 -v

输出:

Volume of a Cylinder with radius 2 and height 4 and height is 50.26548245743669

既不指定-q 也不指定-v:

python demo3.py -r 2 -H 4 

输出:

Volume of Cylinder = 50.26548245743669

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: argparsePython标准库中的一个命令行解析模块。它可以自动生成帮助和使用信息,并且支持默认值、可选参数、位置参数等。 下面是一个简单的使用argparse的例子: ```python import argparse parser = argparse.ArgumentParser(description='A simple argparse example') parser.add_argument('-n', '--name', type=str, help='Your name') parser.add_argument('-a', '--age', type=int, help='Your age') args = parser.parse_args() print('Hello,', args.name, 'your age is', args.age) ``` 运行上面的代码后,可以通过命令行来传入参数,如: ``` python test.py -n John -a 30 ``` 这样就能在程序中得到参数name和age的值,输出: ``` Hello, John your age is 30 ``` argparse模块还支持其他选项,如添加默认值、设置参数为可选或必选等,详见官方文档。 ### 回答2: argparsePython中的一个命令行参数解析模块。它可以用来解析命令行参数以及生成用于帮助文档的用户友好的提示信息。 使用argparse模块可以轻松定义和解析命令行参数。下面是一个argparse的简单实例: 假设我们要编写一个程序来计算两个数字的和。我们希望能够从命令行传递这两个数字作为参数,并且能够选择是否将计算结果打印出来。 首先,我们需要导入argparse模块,然后创建一个ArgumentParser对象: import argparse parser = argparse.ArgumentParser() 然后,我们可以使用add_argument()方法来定义我们需要的参数: parser.add_argument("num1", type=int, help="第一个数字") parser.add_argument("num2", type=int, help="第二个数字") parser.add_argument("-p", "--print", action="store_true", help="打印计算结果") 在这个例子中,我们使用add_argument()方法定义了两个位置参数num1和num2,分别表示第一个数字和第二个数字。我们还使用了一个可选参数--print(简写为-p),用来表示是否打印计算结果。action="store_true"表示如果命令行中指定了--print参数,则将其存储为True,否则为False。 接下来,我们需要使用parse_args()方法来解析命令行参数: args = parser.parse_args() 现在,我们可以使用args对象来访问用户输入的参数了: sum_result = args.num1 + args.num2 if args.print: print("计算结果:", sum_result) 最后,我们可以将上述代码保存为一个Python脚本文件,然后在命令行中运行该文件,并传递两个数字和可选的--print参数来测试程序的功能,例如: python calculator.py 2 3 --print 以上就是argparse模块的解析和实例的简单介绍。这个模块非常灵活和强大,可以用于处理各种类型的命令行参数,包括位置参数、可选参数、默认值等等。它还可以生成用户友好的帮助文档,以方便用户使用程序。 ### 回答3: Pythonargparse模块是一个用于解析命令行参数的库。它可以帮助我们在命令行中传递参数,并且提供了一些额外的功能,比如生成帮助信息和错误提示。 使用argparse模块非常简单。我们首先需要导入argparse库,然后创建一个ArgumentParser对象。然后,我们可以使用add_argument()方法来添加我们需要的命令行参数。 add_argument()方法有很多参数可以配置,比如name或flags指定参数的名称,type指定参数的类型,default指定参数的默认值等等。我们可以根据我们的具体需求来配置这些参数。 当命令行参数被定义后,我们可以通过parse_args()方法来解析命令行参数。这个方法会返回一个包含解析后的参数的命名空间对象,我们可以使用这个对象的属性来访问具体的参数值。 下面是一个使用argparse模块的简单示例: ```python import argparse # 创建ArgumentParser对象 parser = argparse.ArgumentParser(description='这是一个解析命令行参数的示例') # 添加命令行参数 parser.add_argument('name', type=str, help='你的名字') parser.add_argument('age', type=int, help='你的年龄') # 解析命令行参数 args = parser.parse_args() # 访问参数值 print('你好,{},你的年龄是{}岁。'.format(args.name, args.age)) ``` 在上面的示例中,我们创建了一个ArgumentParser对象,并添加了两个命令行参数:name和age。然后我们解析命令行参数,并使用args对象访问参数值并打印出来。 当我们在命令行中运行这个脚本时,我们需要在脚本名称后面提供两个参数,即我们的名字和年龄。比如: ``` $ python script.py Alice 25 ``` 这样,脚本就会打印出:`你好,Alice,你的年龄是25岁。`

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值