Python: argparse基本用法

Python: argparse基本用法

在这里插入图片描述


🌈 个人主页:高斯小哥
🔥 高质量专栏:【Matplotlib之旅:零基础精通数据可视化】
💡 创作高质量博文,分享更多关于深度学习、PyTorch、Python领域的优质内容!

🌵文章目录🌵

  • 一、为什么要使用argparse?💡
  • 二、argparse基本用法 📚
    • 1️⃣ 导入argparse模块
    • 2️⃣ 创建ArgumentParser对象
    • 3️⃣ 添加命令行参数
    • 4️⃣ 解析命令行参数
    • 🎉 完整示例
    • 🎁 小结
  • 三、进阶用法 🚀
    • 🔄 位置参数和可选参数
    • 🔒 互斥参数
    • 🌈 参数默认值
    • 📋 参数类型
    • 🔍 参数选择
    • 🔒 参数验证
  • 四、总结 📚
  • 五、最后 🤝

  👋大家好!今天我们来聊一聊Python中一个非常实用的模块——argparse。这个模块可以帮助我们轻松地编写用户友好的命令行接口。如果想要为你的Python脚本添加一些命令行参数,argparse会是你的好帮手。🚀

一、为什么要使用argparse?💡

  在Python脚本中,我们经常需要处理一些用户输入的参数。这些参数可能是文件路径、操作选项、配置设置等。如果直接使用sys.argv来处理这些参数,代码可能会变得非常混乱,而且不易于维护。argparse模块提供了一个更加直观和灵活的方式来处理命令行参数。


二、argparse基本用法 📚

1️⃣ 导入argparse模块

首先,我们需要导入argparse模块:

import argparse

2️⃣ 创建ArgumentParser对象

接下来,我们创建一个ArgumentParser对象,这个对象会保存我们定义的所有命令行参数信息:

parser = argparse.ArgumentParser(description='这是一个示例程序')

这里的description参数是可选的,它用于描述这个命令行程序的主要功能。

3️⃣ 添加命令行参数

  然后,我们可以使用add_argument()方法来添加命令行参数。这个方法有很多参数,其中最重要的是name,它指定了命令行参数的名称。例如,我们添加一个名为input的命令行参数:

parser.add_argument('input', type=str, help='输入文件的路径')

  这里的type参数指定了参数的类型,help参数用于描述这个参数的作用。如果参数是一个可选参数,我们可以使用---前缀来定义它:

parser.add_argument('--output', type=str, help='输出文件的路径')
parser.add_argument('-v', '--verbose', action='store_true', help='显示详细输出')

  在上面的例子中,--output是一个可选参数,它的类型是字符串。-v--verbose是同一个可选参数的两种形式,它们的类型是布尔值,当用户在命令行中指定这个参数时,它的值为True,否则为Falseaction='store_true'表示当指定这个参数时,将其值设置为True

4️⃣ 解析命令行参数

最后,我们使用parse_args()方法来解析命令行参数。这个方法会返回一个命名空间,其中包含了所有命令行参数的值:

args = parser.parse_args()

然后,我们就可以通过args.参数名的方式来访问这些参数的值了:

print('输入文件:', args.input)
print('输出文件:', args.output)
print('详细输出:', args.verbose)

**注意:**在实际的脚本中,我们通常不会直接打印这些参数的值,而是会根据这些值来执行相应的操作。

🎉 完整示例

下面是一个使用argparse模块的完整示例程序:

import argparsedef main():# 创建ArgumentParser对象parser = argparse.ArgumentParser(description='这是一个文件处理程序')# 添加命令行参数parser.add_argument('input', type=str, help='输入文件的路径')parser.add_argument('--output', type=str, default='output.txt', help='输出文件的路径(默认为output.txt)')parser.add_argument('-v', '--verbose', action='store_true', help='显示详细输出')# 解析命令行参数args = parser.parse_args()# 处理输入文件(这里只是简单地打印出参数值)print('输入文件:', args.input)print('输出文件:', args.output)# 如果指定了--verbose参数,显示详细输出if args.verbose:print('详细输出已开启!')else:print('详细输出已关闭。')if __name__ == '__main__':main()

将上面的代码保存为一个Python脚本(例如file_processor.py),然后在命令行中运行它:

1. 在命令行显式指定verbose参数:

python file_processor.py input.txt --output output.txt -v

输出:

输入文件: input.txt
输出文件: output.txt
详细输出已开启!

2. 在命令行不显式指定verbose参数:

python file_processor.py input.txt --output output.txt

输出:

输入文件: input.txt
输出文件: output.txt
详细输出已关闭。

🎁 小结

  通过上面的介绍和示例,我们可以看到argparse模块是一个非常强大和灵活的工具,它可以帮助我们轻松地处理命令行参数。在实际开发中,我们可以根据需要添加更多的命令行参数,并根据这些参数的值来执行相应的操作。通过使用argparse模块,我们可以编写出更加用户友好的命令行工具,提高用户体验和程序的可维护性。


三、进阶用法 🚀

  除了基本的用法之外,argparse还提供了许多进阶的功能,让你可以更加灵活地控制命令行参数的处理。

🔄 位置参数和可选参数

  argparse允许你定义位置参数和可选参数。位置参数是指那些必须按照特定顺序提供的参数,而可选参数则可以使用特定的标志来指定。

parser.add_argument('positional', help='a positional argument')
parser.add_argument('--optional', help='an optional argument')

🔒 互斥参数

  你可以使用mutually_exclusive_group来创建一组互斥的参数,这些参数中只能选择一个。

group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--argument1', action='store_true')
group.add_argument('--argument2', action='store_false')

🌈 参数默认值

  你可以为参数设置默认值,这样如果用户没有提供该参数,就会使用默认值。

parser.add_argument('--some-int', type=int, default=42)

📋 参数类型

  argparse支持多种参数类型,包括字符串、整数、浮点数、布尔值等。你还可以通过自定义类型来处理更复杂的参数。

parser.add_argument('--count', type=int, help='a simple integer')
parser.add_argument('--file', type=argparse.FileType('r'), help='a readable file')

🔍 参数选择

你可以使用choices参数来限制用户只能选择特定的值。

parser.add_argument('--color', choices=['red', 'blue', 'green'])

🔒 参数验证

argparse支持参数验证,确保用户提供的参数符合特定的条件。

def positive_int(value):ivalue = int(value)if ivalue < 0:raise argparse.ArgumentTypeError('%s is not a positive integer' % value)return ivalueparser.add_argument('--positive-int', type=positive_int, help='a positive integer')

四、总结 📚

  argparse是一个强大而灵活的模块,它可以帮助你轻松地处理命令行参数,提高你的Python脚本或程序的用户体验。通过掌握基本用法和进阶功能,你可以编写出更加用户友好的命令行工具,满足各种实际需求。记住,良好的命令行接口是程序与用户之间的重要桥梁,它能够让用户更加方便地使用你的程序,并增加他们对你的程序的信任感。所以,不妨花些时间学习和掌握argparse模块,让你的程序更加出色!


五、最后 🤝

  亲爱的读者,感谢您每一次停留和阅读,这是对我们最大的支持和鼓励!🙏在茫茫网海中,您的关注让我们深感荣幸。您的独到见解和建议,如明灯照亮我们前行的道路。🌟若在阅读中有所收获,一个赞或收藏,对我们意义重大。

  我们承诺,会不断自我挑战,为您呈现更精彩的内容。📚有任何疑问或建议,欢迎在评论区畅所欲言,我们时刻倾听。💬让我们携手在知识的海洋中航行,共同成长,共创辉煌!🌱🌳感谢您的厚爱与支持,期待与您共同书写精彩篇章!

  您的点赞👍、收藏🌟、评论💬和关注💖,是我们前行的最大动力!

  🎉 感谢阅读,祝你编程愉快! 🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink介绍

Flink 介绍 文章目录 Flink 介绍1. 简介1.1 背景1.2 用途 2. 核心概念2.1 流&#xff08;Stream&#xff09;2.2 转换&#xff08;Transformation&#xff09;2.3 窗口&#xff08;Window&#xff09;2.4 状态&#xff08;State&#xff09; 3. 编程模型3.1 编程模型介绍3.2 程…

排序算法1:冒泡排序、快速排序、插入排序

排序算法&#xff1a;交换类排序&#xff0c;插入类排序、选择类排序、归并类排序 交换类排序&#xff1a;冒泡排序、快速排序 一、冒泡排序 #include <stdio.h> #include <stdlib.h> #include <time.h> typedef int ElemType; typedef struct{ElemType *e…

【Java EE初阶二十二】https的简单理解

1. 初识https 当前网络上,主要都是 HTTPS 了,很少能见到 HTTP.实际上 HTTPS 也是基于 HTTP.只不过 HTTPS 在 HTTP 的基础之上, 引入了"加密"机制&#xff1b;引入 HTTPS 防止你的数据被黑客篡改 &#xff1b; HTTPS 就是一个重要的保护措施.之所以能够安全, 最关键的…

第2.5章:StarRocks表设计--Colocation Join

目录 一、StarRocks数据划分 1.1 分区 1.2 分桶 二、Colocation Join实现原理 2.1 Colocate Join概述 2.2 Colocate Join实现原理 三、应用案例 注&#xff1a;本篇文章阐述的是StarRocks-3.2版本的Colocation Join 官网文章地址&#xff1a; Colocate Join | StarRoc…

css知识:盒模型盒子塌陷BFC

1. css盒模型 标准盒子模型&#xff0c;content-box 设置宽度即content的宽度 width content 总宽度content&#xff08;width设定值&#xff09; padding border IE/怪异盒子模型&#xff0c;border-box width content border padding 总宽度 width设定值 2. 如何…

互联网加竞赛 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

oppo手机如何录屏?解锁录屏新功能!

“最近换了一款oppo手机&#xff0c;感觉它的拍照功能真的很强大。但除此之外&#xff0c;我发现oppo还有许多隐藏功能&#xff0c;比如录屏。但我尝试了很久&#xff0c;都没找到录屏的开关在哪里。有没有哪位oppo用户知道怎么打开这个功能呢&#xff1f;” 随着科技的不断发…

Nexus 仓库

一、仓库介绍 1.仓库类型 proxy&#xff1a;是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy&#xff0c;当用户向这个proxy请求一个artifact&#xff0c;这个proxy就会先在本地查找&#xff0c;如果找不到的话&#xff0c;就会从远程仓库下载&#x…

小迪安全29WEB 攻防-通用漏洞SQL 注入增删改查盲注延时布尔报错

#知识点&#xff1a; 1、明确查询方式注入 Payload 2、明确查询方式注入产生功能 3、明确 SQL 盲注延时&布尔&报错 #详细点&#xff1a; 盲注就是在注入过程中&#xff0c;获取的数据不能回显至前端页面。 也就是在代码中无echo将sql结果输出出来 此时&#…

详解 IT/OT 融合的五层架构(从PLC/SCADA到MES/ERP)

作为一个电气自动化的从业者&#xff0c;有必要搞懂下面术语的意思。 IT&#xff1a;Information Technology的缩写&#xff0c;指信息技术&#xff1b; OT&#xff1a;Operational Technology的缩写&#xff0c;指操作层面的技术&#xff0c;比如运营技术&#xff1b;CT&…

⭐北邮复试刷题LCR 037. 行星碰撞__栈 (力扣119经典题变种挑战)

LCR 037. 行星碰撞 给定一个整数数组 asteroids&#xff0c;表示在同一行的小行星。 对于数组中的每一个元素&#xff0c;其绝对值表示小行星的大小&#xff0c;正负表示小行星的移动方向&#xff08;正表示向右移动&#xff0c;负表示向左移动&#xff09;。每一颗小行星以相…

VirtualPainting:新一代多传感器融合方案,大幅提升3D目标检测性能

论文标题&#xff1a;VirtualPainting: Addressing Sparsity with Virtual Points and Distance-Aware Data Augmentation for 3D Object Detection 论文作者&#xff1a;Sudip Dhakal, Dominic Carrillo, Deyuan Qu, Michael Nutt, Qing Yang, Song Fu 导读&#xff1a; 本文…

后端程序员入门react笔记——react的diff算法(三)

diffing算法 虚拟dom 我们知道&#xff0c;react里面操作的都是虚拟dom&#xff0c;最后经过render渲染为真正的dom&#xff0c;那么为什么要提出虚拟dom这个概念呢&#xff1f;其实就是将逻辑和视图区分开&#xff0c;react的虚拟dom&#xff0c;就相当于mvc的c&#xff0c;…

【自然语言处理】:实验5,司法阅读理解

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢…

激光条纹中心线提取算法FPGA实现方案

1 概述 激光条纹中心线提取是3D线激光测量领域一个较为基础且重要的算法。目前&#xff0c;激光条纹中心线提取已有多种成熟的算法&#xff0c;有很多相关的博客和论文。 激光条纹中心线提取的真实意义在于工程化和产品化的实际应用&#xff0c;而很多算法目前只能用于学术研究…

五、分类算法 总结

代码&#xff1a; from sklearn.datasets import load_iris, fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.naive_bayes import MultinomialNB from s…

括号匹配(终极版)(典型栈的运用的题目,值得一看)

括号匹配时运用栈的一个典型例子&#xff0c;它是充分利用了栈先进后出的特性&#xff0c;在这之前&#xff0c;我们先来看一个简单的题目 括号匹配1 Description 输入一串带括号的表达式&#xff0c;判断输入的表达式是否合理。即判断括号是否匹配。为了简化题目&#xff0…

代码随想录KamaCoder46. 携带研究材料(第六期模拟笔试)

题目&#xff1a; 代码(首刷看解析 2024年2月22日&#xff09;&#xff1a; #include<vector> #include<iostream> using namespace std; int Pacakge(vector<int>& a,vector<int>& weights, vector<int>& values) {int M a[0];//…

ElasticSearch语法

Elasticsearch 概念 入门学习: Index索引>MySQL 里的表(table)建表、增删改查(查询需要花费的学习时间最多)用客户端去调用 ElasticSearch(3 种)语法:SQL、代码的方法(4 种语法) ES 相比于 MySQL&#xff0c;能够自动帮我们做分词&#xff0c;能够非常高效、灵活地查询内…

【快速上手QT】04-定时器Timer

先来个小示例 我们先简单的来触发一下定时器。 #include "Zhetu.h"#include <qdebug.h>void Zhetu::timerEvent(QTimerEvent* event) { //定时器触发函数qDebug() << "Hello world"; }Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){t…