首页 > 编程知识 正文

模块,python之OS模块详解

时间:2023-05-05 15:45:57 阅读:42743 作者:1721

本文的目录argparse模块1、基本用法2、一些常用选项1 .选项参数--(和默认值2. action3. metavar(2,dest和nargs(1 ()

arg稀疏模块

argparse模块是python的命令行分析包,可以在命令行中将参数直接传递给程序,也可以修改参数。 argparse模块内置于python中,不需要单独安装

假设一个项目有五个参数(p1、p2、p3、p4、p5 )和两个py文件。 其中,py1是) 1、2、3、4 ),py2是) 1、2、3、5 ),但py1和py2使用我们的参数py。如果不使用argparse模块,首先,它们分别位于两个文件中每次修改参数值都需要进入程序进行修改,不方便修改。 然后,必须在两个文件中分别定义参数。 这相当于定义了一个或多个参数1、2和3。 使用argparse模块时,上述5个参数定义一次即可,需要变更参数时可以在命令行指定变更值

一.基本用法argparse官方文档

构建argparse模块主要分为四个步骤。

导入argparse模块以创建ArgumentParser对象。 ArgumentParser对象包含将命令行分析为python数据类型所需的所有附加信息参数。 将参数添加到上面创建的对象中,然后调用add_argument (方法分析参数。 分析上面添加的参数,调用parse_args

#1.导入arg parse模块导入arg parse # 2。 ArgumentParser对象parser=arg parse.argument parser (#3.添加参数parser.add_argument )的type=int ) parser.add type=str ) # 4.分析参数args=parser.parse_args ) ) prinnng python example.py输出:usage:example.py[-h] 运行numberstrexample.py : error : thefollowingargumentsarerequired 3360 str运行“python example.py -h”输出3: usage : 请输入numberstrpositionalarguments 3360 number数字str并输入字符串optional AAR-helpshowthishelpmessageandexit ' ' python example.PPAR

显示python example.py -h提示信息

add _ argument (帮助的内容是参数的说明,type是变量的种类

必须在python example.py 5 hello,world命令行中为参数提供值,才能运行程序。 为参数指定值后,parse_args ) )方法分析参数并将所有参数指定给args。 其中,运行参数number被分配给5,str被分配给hello

15hello,world此时我们打印(Args ),输出为Namespace (number=5,str='hello,world ' ),Args为namespace数据类型

二、几个常用选项1 .可选参数((和默认值)上面的number和str是位置参数) (也就是说是必需的,要想成为可选参数,可以在变量之前) )添加

importargparseparser=arg parse.argument parser () parser.add_argument('--number ',help='数字',type=int ) type=str (args=parser.parse _ args ) ) print(args ) '执行' python example2.py '输出336666 world ' )执行' python exaxampld '

r和str赋值程序即可运行,此时未赋值的变量number为None,有默认值default的str为“hello,world”;当我们需要给可选参数进行赋值时,用–param=xx即可

如果我们想把可选参数变为必选,只需要在相应的语句中加入“required=True”即可,例如上述number必须提供一个数值的话parser.add_argument("--number", type=int, required=True, help="请输入数字"),此时如果在命令行中运行的时候不给number提供参数就会报错

2. action

除了上述我们直接在命令中给参数赋值之外,还有一种比较有趣的赋值方式,用到action,下面我们直接举例说明

# example.pyimport argparseparser = argparse.ArgumentParser()# parser.add_argument('--t', help=' ', action='store_true', default=False)parser.add_argument('--t', help=' ', action='store_true')opt = parser.parse_args()print(opt.t)'''python example.py 输出:False不需要给t传入参数True or Falsepython example.py --t 输出:True'''

也就是说action=‘store_true’,在运行时该变量不需要传入参数(且不能传入参数),只要写明该变量他就自动就变为True,如果不写该变量则为False

注意:由于有action的变量默认为False,所以如果后面加入default=False默认不变,如果加入default=True则action就失去了作用,当然这么做也就没有意义了,所以一般不加入default=True

3. metavar、dest和nargs

这三个参数仅作为学习使用,但是实际上好像用不到,可以不用看

其实我也不是很理解这三个参数的作用

(1) metavar

metavar会在用户寻求帮助信息时在命令行提供帮助信息,而不同于代码中的“help”,help对参数起到解释作用,即解释这个参数究竟是干什么的,metavar则是解释这个参数应该提供给一个什么类型的值

例如

# metavar.pyimport argparseparser = argparse.ArgumentParser()parser.add_argument('--foo', help="a number to Sam")parser.add_argument('bar')parser.parse_args('X --foo Y'.split())parser.print_help()'''python metavar.py输出:usage: metavar.py [-h] [--foo FOO] bar positional arguments: bar optional arguments: -h, --help show this help message and exit --foo FOO a number to Sam'''

其中FOO为在没有metavar参数情况下系统的默认提示,后面的a number to Sam告诉我们foo是一个给Sam的数字

下面我们运行两个有metavar的例子

第一个例子的默认提示信息从FOO变成了YYY import argparseparser = argparse.ArgumentParser()parser.add_argument('--foo', metavar='YYY')parser.add_argument('bar', metavar='XXX')parser.parse_args('X --foo Y'.split())parser.print_help()'''python metavar.py输出:usage: metavar.py [-h] [--foo YYY] XXX positional arguments: XXXoptional arguments: -h, --help show this help message and exit --foo YYY''' 第二个例子narges=2表示参数foo可以接受两个参数,因此我们的提示信息也可以接受两个,其中metavar有两个参数,使用tuple元祖来表示这两个参数的信息 import argparseparser = argparse.ArgumentParser(prog='PROG')parser.add_argument('-x', nargs=2)parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz'))parser.print_help()'''python metavar.pyusage: PROG [-h] [-x X X] [--foo bar baz] optional arguments: -h, --help show this help message and exit -x X X --foo bar baz''' (2) dest参数

dest不同于metavar的是他不仅可以提示我们的参数信息,还可以替换原有的参数变量,在介绍此功能前,我们先介绍两个关于位置参数和可选参数的例子
上述的可选参数“–param”或者位置参数“param”实际上在被赋值时都是在向add_argument()方法中的dest关键字进行赋值,对于位置参数直接将其赋为dest关键字即可,例如下面程序直接将bar赋值为dest关键字

import argparseparser = argparse.ArgumentParser()parser.add_argument('bar')parser.parse_args(['XXX'])

此时的namespace为Namespace(bar='XXX')

上面的例子可能对dest依然不能很好的理解,下面继续解释,对于可选参数(带有“–”),与上述位置参数的程序不同,首先如果我们提供了几个参数,首选参数为第一个带有(–)的参数,即不论我们对语句中的哪个参数进行赋值,最终都是赋值给了第一个带有(–)的参数;如果参数全都是只有一个(-),那么就赋值给第一个带有(-)的参数

上面的话怎么理解呢:可以简单理解为带有--的参数具有优先赋值权。例如下面的程序,对于第一个add_argument()方法,不论我们给哪个参数赋值,最终赋值的结果都是foo_bar参数(注意:参数中含有-,由于命名规则,自动将-变为_);对于第二个add_argument()方法,不论对哪个参数赋值,都是赋值给x

import argparseparser = argparse.ArgumentParser()parser.add_argument('-f', '--foo-bar', '-foo')parser.add_argument('-x', '-y')a = parser.parse_args('-f 1 -x 2'.split())print(a)b = parser.parse_args('--foo 1 -y 2'.split())print(b)'''Namespace(foo_bar='1', x='2')Namespace(foo_bar='1', x='2')'''

在知道add_argument()方法可以有多个参数以及最终不论哪个参数最终都是赋值给方法中的dest变量之后,我们就可以直接在方法中提供dest参数作为我们的最终变量,但是在给参数进行赋值时还是需要带有(–)的变量,例如下面程序,我们在赋值时只能够对moo进行赋值,但是在最终的Namespace空间中的的参数是bar

import argparseparser = argparse.ArgumentParser()parser.add_argument('--moo', dest='bar')a = parser.parse_args('--moo 3'.split())print(a)parser.print_help()'''Namespace(bar='3') usage: metavar.py [-h] [--moo BAR] optional arguments: -h, --help show this help message and exit --moo BAR'''

最后我们用一个程序来加深对help,metavar和dest参数的理解
从输出中我们可以看出,help是对参数的简介,metavar也只起到对参数number的解释作用,并不会真正影响到我们最终得到的number变量的名字,而dest不一样,他不仅起到了对参数string的解释作用,并且最终还会替换掉string成为我们最终得到的number_no变量

import argparseparser = argparse.ArgumentParser()parser.add_argument('--number', metavar="number_yes", help="a number we need")parser.add_argument('--string', dest='number_no')a = parser.parse_args('--number 1 --number 3'.split())print(a)b = parser.parse_args('--number 1 --string 3'.split())print(b)parser.print_help()'''Namespace(number='3', number_no=None)Namespace(number='1', number_no='3')usage: exe.py [-h] [--number number_yes] [--string NUMBER_NO]optional arguments: -h, --help show this help message and exit --number number_yes a number we need --string NUMBER_NO'''

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。