最新要闻
- 焦点日报:美国上万架航班停飞!初步调查:因一个数据库文件损坏
- 环球观察:小米13 Pro用上安卓最高端屏幕 雷军:价格最贵
- 4000吨巨型“充电宝”广东下水:每天可发2.4万度电
- 每日信息:高德地图上线一键报平安功能 路程家人一看便知
- 天天最资讯丨2022年新生儿爆款名字出炉上热搜:男/女孩这些名字土爆了?
- 环球信息:爱奇艺APP投屏加钱 上海消保委点名批评:不合理、不厚道
- 特斯拉降价效果显著!友商会不会跟进降价?
- 焦点消息!阿凡达2不适合国人?国产科幻大片《流浪地球2》迎战 还有《满江红》等一次看爽
- 12306出现故障无法查车次 客服回应:网络问题 建议多次刷新
- 环球焦点!羡慕吗?微软宣布给员工“无限休假”福利:不再固定天数
- 环球观点:AMD RDNA3显卡架构底层细节公开!606页 应有尽有
- 前沿资讯!微信隐藏功能无了!群空间助手小程序宣布3月下线:号称永久保存
- 世界滚动:腾讯优酷后!爱奇艺限制投屏 会员只能看480P:专家发声 用户只能接受
- 环球快看点丨SUV比亚迪卖爆!榜一大哥月销7万+、一代神车没落
- 《黑豹2》女主演利蒂西娅·赖特:续集已在计划中
- 头条:疑似零跑C11路边停车起火 车尾疯狂往外喷火
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天热推荐:python中argparse模块的用法
argparse 模块
一个可执行文件或者脚本都可以接收参数。
(资料图片)
$ ls -l /etc/etc 是位置参数-l 是短选项
如何把这些参数传递给程序呢?从3.2开始Python提供了功能强大的参数分析的模块argparse。
1.参数分类
参数分为:
- 位置参数,参数放在那里,就要对应一个参数位置。例如/etc就是对应一个参数位置。
- 选项参数,必须通过前面是 - 的短选项或者 -- 的长选项,然后后面的才算该选项的参数,当然选项后面也可以没有参数。
上例中,/etc对应的是位置参数,-l是选项参数。
ls -alh src
2.基本解析
先来一段最简单的程序
import argparseparser = argparse.ArgumentParser() # 获得一个参数解析器args = parser.parse_args() # 分析参数parser.print_help() # 打印帮助
运行结果
$ python test.py -husage: test1.py [-h] optional arguments:-h, --help show this help message and exit
argparse不仅仅做了参数的定义和解析,还自动帮助生成了帮助信息。尤其是usage,可以看到现在定义的参数是否是自己想要的。
3.解析器的参数
参数名称 | 说明 |
---|---|
prog | 程序的名字,缺省使用 sys.argv[0] 的 basename |
add_help | 自动为解析器增加 -h 和 --help 选项,默认为True |
description | 为程序功能添加描述 |
- parser = argparse.ArgumentParser(prog="ls", add_help=True, description="list directory contents")
$ python test.py --helpusage: ls [-h]list directory contentsoptional arguments: -h, --help show this help message and exit
4.位置参数解析
ls 基本功能应该解决目录内容的打印。打印的时候应该指定目录路径,需要位置参数。
import argparse # 获得一个参数解析器parser = argparse.ArgumentParser(prog="ls", add_help=True, description="list directory contents")parser.add_argument("path") args = parser.parse_args() # 分析参数parser.print_help() # 打印帮助 # 运行结果,出现了错误,提示需要输入path对应的位置参数usage: ls [-h] pathls: error: the following arguments are required: path
程序定义为:
ls [-h] path-h为帮助选项,可有可无path为位置参数,必须提供
传参
parse_args(args=None, namespace=None)
args 参数列表,一个可迭代对象。内部会把可迭代对象转换成list。如果为None则使用命令行传入参数,非None则使用args参数的可迭代对象。
import argparse # 获得一个参数解析器parser = argparse.ArgumentParser(prog="ls", add_help=True, description="list directory contents")parser.add_argument("path") # 位置参数args = parser.parse_args(("/etc",)) # 分析参数,同时传入可迭代的参数print(args, args.path) # 打印名词空间中收集的参数parser.print_help() # 打印帮助
运行结果
Namespace(path="/etc") /etcusage: ls [-h] path list directory contents positional arguments: path optional arguments: -h, --help show this help message and exit
Namespace(path="/etc")里面的path参数存储在了一个Namespace对象内的属性上,可以通过Namespace对象属性来访问,例如args.path
非必须位置参数
上面的代码必须输入位置参数,否则会报错。
usage: ls [-h] pathls: error: the following arguments are required: path
但有时候,ls命令不输入任何路径的话就表示列出当前目录的文件列表。
import argparse# 获得一个参数解析器parser = argparse.ArgumentParser(prog="ls", add_help=True, description="list directory contents")parser.add_argument("path", nargs="?", default=".", help="path help") # 位置参数,可有可无,缺省值,帮助args = parser.parse_args() # 分析参数,同时传入可迭代的参数print(args) # 打印名词空间中收集的参数parser.print_help() # 打印帮助# 运行结果Namespace(path=".")usage: ls [-h] [path]list directory contentspositional arguments: path path helpoptional arguments: -h, --help show this help message and exit
可以看出path也变成可选的位置参数,没有提供就使用默认值 .点号 表示当前路径。
help 表示帮助文档中这个参数的描述nargs 表示这个参数接收结果参数
- ? 表示可有可无
- +表示至少一个
- *可以任意个
- 数字表示必须是指定数目个
default 表示如果不提供该参数,就使用这个值。一般和?、*配合,因为它们都可以不提供位置参数,不提供就用缺省值
5.选项参数
-l的实现
parser.add_argument("-l") 就增加了选项参数,参数定义为ls [-h][-l L] [path]
和我们要的形式有一点出入,我们期望的是 [-l] ,怎么解决?
nargs能够解决吗?
parser.add_argument("-l", nargs="?")ls [-h][-l [L]] [path]
-l还不是可选参数。
那么,直接把nargs=0,意思就是让这个选项接收0个参数,如下
parser.add_argument("-l", nargs=0)
结果,抛出异常
raise ValueError("nargs for store actions must be > 0; if you "ValueError: nargs for store actions must be > 0; if you have nothing to store, actions such asstore true or store const may be more appropriate
看来nargs是控制位置参数和选项参数的,不能影响选项参数的参数。
为了这个问题,使用action参数
parser.add_argument("-l", action="store_true")
看到命令定义变成了ls [-h][-l] [path]
提供-l选项,例如
- ls -l 得到Namespace(l=True, path="."),提供-l值是True
- ls 得到Namespace(l=False, path="."),未提供-l值是False
这样同True、False来判断用户是否提供了该选项
parser.add_argument("-l", action="store_const", const = 20)# 提供-l选项,属性值为20;否则,对应值为None
-a的实现
parser.add_argument("-a", "--all", action="store_true") # 长短选项同时给
6.属性名称
参数都是Namespace对象的属性,如果想指定这些属性名,可以使用dest。
parser.add_argument("-l", action="store_true", dest="longfmt")
7.示例
import argparse # 获得一个参数解析器parser = argparse.ArgumentParser(prog="ls", add_help=True, description="list directory contents")# 位置参数,可有可无,缺省值,帮助parser.add_argument("path", nargs="?", default=".", help="directory")parser.add_argument("-l", action="store_true", dest="longfmt", help="use along listing format")parser.add_argument("-a", "--add", action="store_true", help="show all file,do not ignore entrues starting with .") # 分析参数,同时传入可迭代的参数args = parser.parse_args()# 打印名称空间中收集的参数print(args)# 打印帮助parser.print_help() # Python学习交流QQ群:153708845 # 输出Namespace(path=".", longfmt=False, add=False)usage: ls [-h] [-l] [-a] [path] list directory contents positional arguments: path directory options: -h, --help show this help message and exit -l use along listing format -a, --add show all file,do not ignore entrues starting with .
8.练习
实现ls命令功能,实现-l、-a和--all、-h选项
实现显示路径下的文件列表
-a和-all 显示包含.开头的文件
-l 详细列表显示
-h 和-l配合,人性化显示文件大小,例如1K、1G、1T等,可以认为1G=1000M
类型字符
c 字符
d 目录
普通文件
l 软链接
b 块设备
s socket文件
p pipe文件,即FIFO
参看Linux、Unix命令ls -lah-rw-rw-r-- 1 python python 5 Oct 25 00:07 test4mode 硬链接 属主 属组 字节 时间 文件名按照文件名排序输出,可以和ls的顺序不一样,但要求文件名排序要求详细列表显示时,时间可以按照“年-月-日 时:分:秒” 格式显示,例如2015-06-17 17:05:00
天天热推荐:python中argparse模块的用法
【天天快播报】使用python自动发送图片给微信好友
焦点日报:美国上万架航班停飞!初步调查:因一个数据库文件损坏
环球观察:小米13 Pro用上安卓最高端屏幕 雷军:价格最贵
4000吨巨型“充电宝”广东下水:每天可发2.4万度电
每日信息:高德地图上线一键报平安功能 路程家人一看便知
天天最资讯丨2022年新生儿爆款名字出炉上热搜:男/女孩这些名字土爆了?
环球热文:【验证码逆向专栏】某验二代滑块验证码逆向分析
开源动物行为分析实验箱(斯金纳箱)特色解析及试用条款
环球信息:爱奇艺APP投屏加钱 上海消保委点名批评:不合理、不厚道
特斯拉降价效果显著!友商会不会跟进降价?
焦点消息!阿凡达2不适合国人?国产科幻大片《流浪地球2》迎战 还有《满江红》等一次看爽
12306出现故障无法查车次 客服回应:网络问题 建议多次刷新
环球焦点!羡慕吗?微软宣布给员工“无限休假”福利:不再固定天数
C#、TS和Dart对比4.1:类型概述
全球速递!虚拟串口及其在串口转以太网中的应用
别催了,别催了,这篇文章我一次性把Shell的内容说完
环球观点:AMD RDNA3显卡架构底层细节公开!606页 应有尽有
前沿资讯!微信隐藏功能无了!群空间助手小程序宣布3月下线:号称永久保存
世界滚动:腾讯优酷后!爱奇艺限制投屏 会员只能看480P:专家发声 用户只能接受
环球快看点丨SUV比亚迪卖爆!榜一大哥月销7万+、一代神车没落
《黑豹2》女主演利蒂西娅·赖特:续集已在计划中
头条:疑似零跑C11路边停车起火 车尾疯狂往外喷火
男子开豪车带马狗羊回家过年 它们都是自己的家人:画面让网友难受
公交司机边开车边抠脚引乘客担忧 官方回应:会研究处理
焦点短讯!这些是最热门的机器学习方法!
【播资讯】通过事件总线EventBus/AsyncEventBus进行JAVA模块解耦 (史上最全)
内存、SSD价格雪崩 韩国芯片双雄终于顶不住了?
又一日系品牌拥抱比亚迪 铃木EVX概念车首发:用上刀片电池
全球视点!美国最大私人地主 大量买地引质疑!比尔盖茨回应:只为提高产量
国产家轿又一“黑马”诞生 长安逸达首发亮相
原长城汽车总裁王凤英将出任小鹏CEO 接替何小鹏?内部回应
围棋哪个国家最强?围棋哪个颜色先下?
都挺好苏明成知道自己不是亲生的是第几集?都挺好的结局是什么?
魂来枫林青的下一句是什么?魂来枫林青是什么意思?
李宁标志刺绣是真的吗?李宁标志设计含义
美的净水器好不好?净水器哪个牌子质量好性价比高?
ios7输入法怎么设置成搜狗?ios7输入法打不出汉字怎么办?
怎么修改系统启动项?修改系统启动项的方法有哪些?
新资讯:MySQL间隙锁、行锁的读写阻塞实验
win8如何找到硬件驱动程序?win8怎么进入安全模式?
港利通手机怎么样?港利通手机怎么恢复出厂设置密码?
当前播报:推特广告收入下跌严重:考虑出售15亿用户名创收
今日看点:春节正常发货:仁和N95灭菌级口罩25片15.9元发车
【全球独家】跟上Windows本步伐!苹果正开发触摸屏Mac笔记本:最早2025年发布
秒变战神!杰士邦延时避孕套大促:立减200元 不到20到手
全球新动态:文件出台!车险价格最高可再降23% 开车越稳越便宜
天天报道:TapTap 算法平台的 Serverless 探索之路
我用AI去讨债:一顿操作猛如虎 3000要回350
环球观察:不止投屏缩水 爱奇艺蓝光码率仅蓝光碟1/13 1080P也糊
4999元限量发售!雷军:小米13定制色水泥灰卖的最好
焦点关注:育碧《怒海战记》再度延期
网速比5G提升100倍 2023年我国将全面推进6G技术研发
环球热议:读编程与类型系统笔记05_函数类型
天天资讯:关于 Serverless 应用架构对企业价值的一些思考
焦点热文:男子高速撞鸟 鸟腿成三叉戟立标 丰田秒变“玛莎拉蒂”
世界关注:解除屏蔽!微信已可正常跳转抖音链接
环球最资讯丨造车新势力第一 广汽埃安宣布将涨价:最高涨6000元
全球今亮点!称雷军是导师、大哥 何小鹏:但不想成为他 太累了
每日热文:郭明錤:iPhone 15 Pro将搭载“固态按键” 取消实体键
【播资讯】东北夫妻去三亚 为省8千机票开电车3600公里 充11次电 比油便宜
新资讯:9499元割韭菜!厂商喷RTX 4080太贵 惹怒NV后帖子删除:用户叫好
短讯!24岁湖北小伙搭17个顺风车到格鲁吉亚求婚引羡慕:女子同意 结婚不要彩礼
全球速递!美国航空局系统故障 致全美航班停飞:已有8609架次延误 1251架次取消
每日快看:失灵事故再现?特斯拉刹车又出问题:八车连环相撞!这次不一样
【全球新视野】洛谷P1040. 加分二叉树
C#、TS和Dart对比2:变量和作用域
电脑故障影响数千架次航班!全美航班停飞限制取消
灵动岛只是过渡品!iPhone 16或配备屏下Face ID
当前要闻:小米将参加MWC2013:不会发布小米13 Ultra
弄疯了无数人的游戏:差点让我砸掉显示器!
焦点消息!登录、投屏处处受限!视频平台被指吃相难看 你还开会员吗?
网址导航
全球看点:P2448 无尽的生命
[概率论与数理统计]笔记:3.3 随机向量的函数的分布与数学期望
世界新资讯:React核心概念与JSX
热消息:伊利回应30支冰糕分30箱发货 被网友吐槽太浪费:订单推送失误造成
全球热点!网友拿到了一加11:真的跟老板说的一样巨流畅
mac下php环境搭建
天天快讯:MQ——如何保证消息不会丢失
144MB缓存游戏神U!AMD锐龙7000X3D定档:情人节大礼
【当前热闻】美国所有航班都已停飞 电脑系统竟突发故障:官方给出恢复时间
速看:偶数位(熟悉二进制)
当前信息:Mysql页分裂
焦点关注:日系首款电动B级轿车!本田雅阁插混版来了:可挂绿牌
广州一宝马SUV冲撞人群 官方通报:已致5死13伤 司机被控制
环球即时:太阳4天内发出两次X级耀斑:几天后指向地球、或引强烈地磁暴
世界视点!02-Sed语法介绍
每日聚焦:真我GT Neo5标准版曝光:不到200g机身塞进5000mAh和骁龙8+
天天微头条丨I Do钻戒母公司被申请破产:被年轻人摒弃 太不保值 有人1.8万买只值180元
新款魏牌拿铁DHT-PHEV亮相惹争议 网友吐槽:不能我一个人瞎
CQOI2007,洛谷P4710涂色
头条焦点:小米最好高端口碑!雷军:MIX Fold 2研发成本很高 屏幕是天价定制
奢侈服装品牌Acne新春广告片被批 网友称其“阴间兔”
男童放鞭炮炸飞井盖连砸两车 科普:炮仗遇上下水道堪比小炸弹
【环球播资讯】男子吐槽APP看天气预报要点8个广告 网友:手机自带的不好吗?
世界快看点丨雅迪参展CES:汽车级快充亮相 20分钟充满80%电池
全球快看点丨链表栈队列递归哈希表有序表
Codeforces 1278 F Cards 增强版 题解 (斯特林数,推式子)
热点在线丨sortablejs 列表拖拽排序,js vue2,解决拖拽排序乱序问题