当前位置:首页 > Python技术文章 > Python中的命令行参数解析工具之docopt详解

Python中的命令行参数解析工具docopt用法知识点

  • 发布时间:
  • 作者:码农之家原创
  • 点击:101

这篇文章主要知识点是关于Python、命令行、参数解析工具、docopt、Python 使用 docopt 解析json参数文件过程讲解 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下相关资源

Keras快速上手:基于Python的深度学习实战

本书系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列中的具体应用为案例,详细介绍了从工具准备、数据获取和处理到针对问题进行建模的整个过程和实践经验,是一本非常好的深度学习入门书。

查看详情

Python中的命令行参数解析工具之docopt详解

前言

docopt 是一个开源的库,代码地址:https://github.com/docopt/docopt。它在 README 中就已经做了详细的介绍,并且还附带了很多例子可供学习,这篇文章也是翻译一下 README 中内容……

docopt 最大的特点在于不用考虑如何解析命令行参数,而是当你把心中想要的格式按照一定的规则写出来后,解析也就完成了。

docopt的安装

docopt有很多种版本,分别支持不同的语言,最简答的docopt支持python脚本,docopt.java支持java脚本,docopts则是支持shell脚本的(下面的例子主要以docopts为例),具体的可以参见github的docopt说明

安装docopt

以mac os x为例安装,安装docopts前首先需要安装docopt,有两种安装方法

方法一

比较简单的方法是直接用 pip 安装, pip install docopt==0.6.2

有些mac可能不支持直接pip 指令,需要先安装pip

方法二

也可以在github上下载源码(docopt是开源项目),然后通过python setup.py install 安装

安装docopts

安装docopts就必须使用上面安装docopt的方法二,在GitHub上下载源码,然后 使用python安装,下载地址

docopt 的实现简单分析

在 Python 中有这么一个属性 __doc__ ,它的值是字符串,一般表示帮助信息,而 docopt 正是利用了这一属性,把帮助信息替换成命令行参数解析说明,再对它进行解析即可。

举个 docopt 中的例子来说明:

"""Naval Fate.
Usage:
 naval_fate.py ship new <name>...
 naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
 naval_fate.py ship shoot <x> <y>
 naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
 naval_fate.py (-h | --help)
 naval_fate.py --version
Options:
 -h --help  Show this screen.
 --version  Show version.
 --speed=<kn> Speed in knots [default: 10].
 --moored  Moored (anchored) mine.
 --drifting Drifting mine.
"""
from docopt import docopt
if __name__ == '__main__':
 arguments = docopt(__doc__, version='Naval Fate 2.0')
 print(arguments)

上述代码段中,很大一段帮助信息就是我们的命令行参数解析说明,在函数入口处调用docopt函数进行解析,返回的arguments变量是一个字典型变量,它记录了选项是否被选用了,参数的值是什么等信息,当程序从命令行运行时,我们就是根据arguments变量的记录来得知用户输入的选项和参数信息。

所以如何写好命令行参数解析说明就变得至关重要了,命令行解析信息包含两部分,分别是使用模式格式和选项描述格式。

使用模式格式(Usage pattern format)

使用模式以usage:开始,以空行结束,如上代码段所示,它主要描述了用户添加命令行参数时的格式,也就是使用时的格式,解析也是按照此格式来进行的。

每一个使用模式都包含如下元素:

* 参数

参数使用大写字母或者使用尖括号<>围起来。

* 选项

选项以短横线开始-或者--。只有一个字母时格式-o,多于一个字母时--output。同时还可以把多个单字母的选项合并,-ovi等同于-o、-v、-i。选项也能有参数,此时别忘了给选项添加描述说明。

接下来是使用模式中用到的一些标识的含义,正确地使用他们能够更好的完成解析任务:

* []

代表可选的元素,方括号内的元素可有可无

* ()

代表必须要有的元素,括号内的元素必须要有,哪怕是多个里面选一个。

* |

互斥的元素,竖线两旁的元素只能有一个留下

* ...

代表元素可以重复出现,最后解析的结果是一个列表

* [options]

指定特定的选项,完成特定的任务。

选项描述格式(Option description format)

选项描述同样必不可少,尤其是当选项有参数,并且还需要为它赋默认值时。

为选项添加参数的格式有两种:

-o FILE --output-FILE  # 不使用逗号,使用 = 符号
-i <file>, --input <file> # 使用逗号,不使用 = 符号

为选项添加描述说明,只需要用两个空格分隔选项和说明即可。

为选项添加默认值时,把它添加到选择描述后面即可,格式如下[default: <my-default-value>]

--coefficient=K The K coefficient [default: 2.95]
--output=FILE Output file [default: test.txt]
--directory=DIR Some directory [default: ./]

如果选项是可以重复的,那么它的值[default: ...]将会一个 list列表,若不可以重复,则它的值是一个字符串。

使用

理解了 使用模式格式 和 选项描述格式 之后,再配合给出的例子就能较好的理解了。

接下来就是得到输入的信息了。

在前面提到arguments参数是一个字典类型,包含了用户输入的选项和参数信息,还是上面的代码段例子,假如我们从命令行运行的输入是

python3 test.py ship Guardian move 100 150 --speed=15

那么打印arguments参数如下:

{'--drifting': False,
 '--help': False,
 '--moored': False,
 '--speed': '15',
 '--version': False,
 '<name>': ['Guardian'],
 '<x>': '100',
 '<y>': '150',
 'mine': False,
 'move': True,
 'new': False,
 'remove': False,
 'set': False,
 'ship': True,
 'shoot': False}

从打印信息可以看到,对于选项,使用布尔型来表示用户是否输入了该选项,对于参数,则使用具体值来表述。

这样一来,程序就可以从arguments变量中得到下一步的操作了。若是用户什么参数都没输入,则打印Usage说明提示输入内容。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 使用 docopt 解析json参数文件过程讲解

1. 背景

在深度学习的任务中,通常需要比较复杂的参数以及输入输出配置,比如需要不同的训练data,不同的模型,写入不同的log文件,输出到不同的文件夹以免混淆输出

常用的parser.add()方法非常占用代码空间,而且输入输出配置无法通过文件更改,只能通过命令行参数改变。

docopt 库提供了一个非常优雅的命令行解析工具,这边只介绍其中解析文件参数

2. 安装

pip install docopt
import docopt
import json
  

3. 使用

docopt 由两部分组成,第一部分是解析部分,通过“”“ -”“”(一段类似注释的双引号表示),这一部分必不可少。

"""
Usage: train <json_file>
"""

上面解析部分的指令很简单,输入应为:

python test.py config.json

第二部分是main 函数:

if __name__ == "__main__":
  args = docopt.docopt(__doc__)
  args = json.load(open(args["<json_file>"]))
  print('==>Params')
  for key in args.keys():
    print('\t{}:{}\n'.format(key,args[key]))
  train(args) 

我将 config.json 设置为:

{
 "dataset":    "human_science",
 "length":     1000,
 "model":     "CNN",
 "log_dir":    "./logs/",
 "output_dir":   "./output/",
 "output_prefix": "human_science_CNN",
 
 "lr":0.01
}

命令行的输出应为:

Python 使用 docopt 解析json参数文件过程讲解

成功将参数传入train()函数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于Python的全部知识点内容总结,大家还可以在下方相关文章里找到Python调用C# Com dll组件的方、 python求最大值最小值的实、 Python工具整理推荐、 等python文章进一步学习,感谢大家的阅读和支持。

上一篇:Pycharm 定制外观教程分享

下一篇:Python正则表达式使用实例详解

展开 +

收起 -

相关内容
Python从小白到大牛

PyCharm厂家JetBrains公司官方推荐用书!赠送教学课件24章,300个示例源代码,4个完整实战项目,教学视频2500分钟!并提供实时在线答疑服务!

查看详情
Python+Spark2.0+Hadoop机器学习与大数据实战

本书从浅显易懂的“大数据和机器学习”原理说明入手,讲述大数据和机器学习的基本概念,浅显易懂的原理介绍加上Step by Step 实机操作、范例程序详细解说,实现降低机器学习与大数据技术

查看详情
自然语言处理Python进阶

第1章教你应用内嵌的NLTK语料库和頻率遍布。人们还将学什么是WordNet,并探寻其特性和使用方法。 第2章演试怎样从各种各样文件格式的数据库中获取文字。人们还将学习培训怎样从互联网源获

查看详情
Python3面向对象编程

本书讲解了类、数据封装、继承、多态、抽象和异常,更新了大量的内容,以反映出近来核心Python库的变化,帮助读者能够深入学习如何正确地使用Python面向对象编程技术来设计软件

查看详情
Python编程:从入门到实践

《Python编程:从入门到实践》是Python3.5编程入门图书(从入门到实践),机器学习,数据处理,网络爬虫热门编程语言,从基本概念到完整项目开发,帮助零基础读者迅速掌握Python编程。

查看详情
Python全栈数据工程师养成攻略

本书介绍了数据工程和Python语法,随后讲解如何获取和存储数据,并实现简单的静态可视化,帮助读者将学习到关于Web建站的一些基础和进阶知识

查看详情
Python设计模式

这本书全面揭示有关设计模式的内容,并结合Python语言进行示例化的解析,适合那些关注软件设计原则,并想将you秀的设计模式应用到Python编程当中的读者阅读

查看详情
预测分析建模:Python与R语言实现

本书介绍使用R与Python预测分析建模来解决实际问题,,并提供有效的解决方法。通过展示建模技术和编程工具,我们将抽象的概念转换为具体的例子,推荐阅读

查看详情
Python从入门到精通

《 Python从入门到精通 》从新手视角去往,根据浅显易懂的語言、多种多样的案例,详解了应用Python开展软件开发应当把握的各层面技术性。全书共有22章,包含初识Python、Python語言基本、运算

查看详情
学习笔记
网友NO.699106

python画图软件是哪个

Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图。一般可绘制折线图、散点图、柱状图、饼图、直方图、子图等等。Matplot使用Numpy进行数组运算,并调用一系列其他的Python库来实现硬件交互。 Pylab是matplotlib面向对象绘图库的一个接口,它的语法和matlab十分相似。也就是说,它主要的绘图命令和matlab对应的命令有相似的参数。 初级绘制 绘图简介 使用matplotlib库绘图,原理很简单,如下5步: 创建一个图纸(figure) 在图纸上创建一个或多个绘图(plotting)区域(坐标系/轴,axes) 在plotting区域上描绘点、线等 为plotting添加修饰标签(绘图线上的或坐标轴上的) 其他各种DIY 相关推荐:《python视频教程》 在上面的过程中,主要就是下面三个元素……

网友NO.873670

Python实现的堆排序算法原理与用法实例分析

本文实例讲述了Python实现的堆排序算法。分享给大家供大家参考,具体如下: 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 具体代码如下: #-*- coding: UTF-8 -*-import numpy as npdef MakeHeap(a): for i in xrange(a.size / 2 - 1, -1, -1):#对非叶子节点的子节点进行调节,构建堆 AdjustHeap(a, i, a.size)def AdjustHeap(a, i, n): j = i*2 +1 #选择节点i的左子节点 x = a[i] #选择节点的数值 while j n: #循环对子节点及其子树进行调整 if j + 1 n and a[j+1] a[j]: #找到节点i子节点的最小值 j += 1 if a[j] = x : #若两个子节点均不小于该节点,则不同调整 break a[i], a[j] = a[j], a[i] #将节点i的数值与其子节点中最小者的数值进行对调 i = j #将i赋为改变的子节点的索引 j = i*2 + 1 #将j赋……

网友NO.457975

快速入手Python字符编码

前言 对于很多接触Python的人而言,字符的处理和语言整体的温顺可靠相比显得格外桀骜不驯难以驾驭。 文章针对Python 2.7,主要因为3对的编码已经有了很大的改善并且实际原理一样,更改一下操作命令即可。 了解完本文,你可以轻松解决文字处理,特殊平台(Windows?)下的编码,爬虫编码等问题。 阅读建议 本文分为如下几个部分: 1.原理 2.具体操作 3.建议的使用习惯 4.疑难问题解答 如果想要了解我给出的使用习惯,可以直接跳到建议的使用习惯。 如果只想要解决相关问题可以直接跳到疑难问题解答。 希望本文能够帮到你。 原理 为了理解方便,这里不谈理论只做类比,具体想要进一步了解各种编码的理论的百度一下好了。 首先说一下我们为什么会碰到各式各样的编码问题: 1.因为我们没有统一编码 2.因为我们没有用对命令(传对数据) 再说一下……

网友NO.593754

用Python将动态GIF图片倒放播放的方法

这次让我们一个用 Python 做一个小工具:将动态 GIF 图片倒序播放! GIF(Graphics Interchange Format) 是一种可以用来呈现动画效果的图片格式,原理就是保存很多帧(Frame)静态图像,然后连续呈现。很多简短的视频也会被转换成动态 GIF 呈现,压缩画质和去除声音之后可以有效地减小文件大小。网络上不计其数的搞笑动图,几乎承载了网友大半的欢乐,但是也有人发现,将正常的动画倒序播放往往可以获得更搞笑的效果,Reddit 上甚至有一个专门的节点:/r/reversegif。 要做到这一点其实很简单,只要从原始图片中提取中间每一帧静态图像,然后将顺序颠倒之后重新生成一张 GIF 图片即可。Python 中专门用于处理图像的库是 PIL,在 PIL 基础上由 Alex Clark 等人开发了一个更友好的版本:Pillow。于是首先来安装(或升级)Pillow: pip install --upgrade pillow -i http://pypi.……

<
1
>

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757