【Python】 配置解析ConfigParser 命令行参数解析optparser

ConfigParser

  ConfigParser包装了配置文件的读取和写入,使得python程序可以更加轻松操作配置文件了。这里的配置文件是指.ini的那种文件,基本格式如下

[section_a]
a_key1 = a_value1
a_key2 = a_value2[section_b]
b_key1 = b_value1
b_key2 = b_value2
b_key3 = b_value3

   将一个文件分隔成几个section,每个section中又有很多键值对,以这样的方式构建起配置文件。

  *每个value在被读进程序的时候都是默认是str变量,所以不用 在配置文件里加引号

 

  ●  程序用法

import ConfigParsercf = ConfigParser.ConfigParser()
cf.read('路径')  #读取文件,但是即便是没找到也不会报错的,只是返回一个空列表########读配置########
cf.sections()        #返回所有section组成的列表

cf.options('section名字')        #读取某个section中所有的option,如返回['a_key1','a_key2']这样子

cf.items()        #返回[('a_key1','a_value1'),...]这样子

cf.get('section_a','a_key1')        #读取某个value了########写配置########
'''
read某个文件,相当于是把这个文件的内容加载进了内存里,然后可以进行以下的一些操作,把它修改掉
'''
cf.set('section_a','a_key3','a_value3')        #增加一条新纪录,这里键可以写已存在的,那就是更新现有的value值

cf.add_section('section_c')cf.write(open("路径","w"))        #最后,把内存中改完的东西固化到一个文件中去,值得注意的是参数不是路径而是一个文件对象!

  ●  ConfigParser的一些注意点

  第一,ConfigParser对象在使用read方法的时候,如果目标文件不存在,read方法不会报错而是返回一个空列表。所以对于配置文件事先就不存在的情况需要自己剔除并且解决。

  第二,ConfigParser对象内部维护了一个堆栈,而read方法是不断叠加地将配置内容加载到这个堆栈上去的。所以说在遍历读取不同配置的时候,如果有必要记得重新创建一个ConfigParser对象来保存信息。要不然之前被read进来的那些文件的信息会依旧在那里的。

【optparser】

  optparser和ConfigParser并没有什么关系= =。 但是当时在学的时候感觉他们长得挺像的,沿袭了一下之前被单词时的习惯,把长得像的都给归结到一起来。。然后刚好这两个内容又都不多,就写在一篇里吧

  optparser主要为脚本加上命令行参数的支持。一般脚本只有sys.argv那样的命令行参数,而optparser可以有像netstat -ntlp这样的“杠”XX的命令,功能就强大了很多。

  首先还是看下主要怎么用:

  一般,关于optparser的操作都是写在main函数里面,毕竟外界传进来的参数要第一时间解析,才能判断到底要做哪些工作。而这些操作,首先是设置命令行参数:

parser = optparser.OptionParser(usage='Usage:%prog [option]')    #usage参数配置的字符串用于说明这个parser提供的命令行参数的用法。在参数为-h 或者--help的时候打印出相关的字符串。建议添加这个usage

paser.add_option('-t','--test',dest='test_variable',default='default',type='string',help='It is a test option',action='store')
'''
这句话是optparser最重要的设置命令行参数的语句。add_option的几个参数的意义分别是:参数短标识,参数长标识,存放变量名,默认值,存放类型,帮助信息,存放动作。所有参数的值都是字符串。
其中值得一提的是type的默认值就是'string',action一般设成'store'
'''

   在设置完几个参数之后,就可以进行解析了,需要来一句语句:

(options,args) = parser.parse_args()

 

  之后,所有被传递到脚本的命令行参数都会被存放到options.XXX这个变量里,XXX是什么由之前设置的每个参数的dest决定。比如前面设置过了-t参数,那么命令行-t后面的值会以字符串的形式被存放到options.tset_variable里面,可以供后续程序使用了。

  另外,在设置参数的时候并没有规定哪些参数是必须的,哪些是可选的,哪些可以不要跟值只需要一个-X出现就行等等。这些我没仔细研究过,不过之前我的处理方法是,在解析完成后,用参数值之前,对获得到的所有参数做一个判断。看看是否有自己必须的参数没有传进来,或者值不合法等等,这样来做一个校验。做完校验之后如果发现校验未通过就要抛出错误或者处理错误了。parser对象自带一个error(s)的方法,可以把错误信息s打印到屏幕上提示用户。如果觉得这样处理错误不够用还可以自己写一个OptParser类,重载其中的error,exit等方法。

 

  ●  如果想要有这个参数出现时表明一个True的情况,并不需要这个参数跟什么值的时候,可以选择的action='store_true'或者'store_false'或者'store_const'。在指定action等于这些值的时候注意不能同时指定type参数,否则会报错。

转载于:https://www.cnblogs.com/franknihao/p/6536594.html

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

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

相关文章

解决:build_attrs() takes at most 2 arguments (3 given)

1.这个原因是由于captcha版本安装太低引起的,所以导致register页面打开报错 2.解决办法就是安装更高级版本的captcha 解决pip install django-simple-captcha0.5.5

docker registry v2与harbor的搭建

docker的仓库 1 registry的安装 docker的仓库我们可以使用docker自带的registry,安装起来很简单,但是可能有点使用起来不是很方便。没有图形化。 开始安装 1 使用镜像加速器 2 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://dc945b6d.m…

在windows下安装Redis

一、下载windows版本的Redis 由于官网上没有windows版的下载地址,所以需要下载windows版本的Redis有以下两个地址: 博主的csdn资源地址:http://download.csdn.net/detail/u010608551/9778240 github下载地址:https://github.com/M…

Django REST framework【学习内容】

快速入门 我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API。 项目设置 创建一个名为 tutorial 的新django项目,然后启动一个名为 quickstart 的新app。 # 创建项目目录 mkdir tutorial cd tutorial# 创建一个virtualenv来隔离我们本地的包依…

DotNetCore跨平台~发布脚本PowerShell的设计

回到目录 这几天对PS情有独忠,被它的强大功能所希引,它可以快速部署,快速发布,将一些连带的动作一次的完成,挺方便,类似于早期的bat文件,也像linux平台的bash脚本,但功能上&#xff…

解决: 'Cannot call `.is_valid()` as no `data=` keyword argument was ' AssertionError: Cannot call `

#注册 def add_person(request):p_name request.POST.get("p_name")p_password request.POST.get("p_password")person_data {"p_name": p_name,"p_password": p_password,}print(person_data)serializer PersonSerializer(person…

软件与程序

一、Java的起源 最初是为家用电器设计的,因为其特点适合于internet, 于是通过internet成为一种计算语言,一个平台,一个网络计算的架构。 二、Java平台分类 ①JavaSE适用于普通PC及笔记本电脑,为其他JAVA程序的开发和运…

Django使用n内置模块发送HTML格式的邮件

def send(request):# subject "小伙子很帅"# message "不禁夸啊"# send_mail(subject,message,"18332191389163.com",["18332191389163.com"])# return HttpResponse("ok")from django.core.mail import EmailMultiAltern…

EDM营销之如何使邮件列表更加有效

营销转化往往是营销人员专攻的必修课,大数据时代,只有真实有效的活跃用户数据,才能进一步促进转化。但仍然有想走捷径的企业会选择通过购买来获取用户数据,不仅数据质量不高,还会降低自身信誉等级。本次Focussend从购买…

spring用的很开心的标签(随时增加)

1Scheduled定时任务标签,cron用表达式,或者其他几种方式,方便不能说。使用再方法智商,不能设置范围域。 2PropertySource定义在整个class文件上,整个class中可以直接用表达式获取properties的内容。 3Value 定义在变量…

Flask-DebugToolbar的配置

该扩展为 Flask 应用程序添加了一个包含有用的调试信息的工具栏。 安装 简单地使用 pip 来安装: $ pip install flask-debugtoolbar用法 设置调试工具栏是简单的: from flask import Flask from flask_debugtoolbar import DebugToolbarExtensionapp Flask(__name__)# the…

微信第三方登录

微信第三方登录: 公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token; 网页授权获取用户基本信息:通过该接口,可以获取用户的基本信息(获取用户的OpenID是…

MVC 中Simditor上传本地图片

1.引用样式和js文件 <link href"~/Content/scripts/plugins/simditor/css/simditor.css" rel"stylesheet" /><script src"~/Content/scripts/plugins/simditor/js/simditor.js"></script> 2.初始化Simditor var editor null;…

在pycharm中自定义模板代码,快速输出固定代码块

pycharm中有时会经常输出固定一段代码,为避免每次重复输入,可以自定义一段模板代码,请看以下图教程: 1. 点击 file 里面的 setting 2. 在搜索框输入live,就会显示出Live Templates, 点击后边的加号, 点击 Live Template 3. 选择设置的语言, 点击下图的Define, 设置要设置…

优质手机APP开发公司的特点

最近自媒体平台封号特严重&#xff0c;获得上亿投资的大号都被封了&#xff0c;或许做自己的APP会是一个好选择。想在众多的app中脱颖而出、希望手机APP获得成功&#xff0c;则必须聘请专业手机APP开发公司。您必须明智地选择公司&#xff0c;因为您的业务的成败取决于您的选择…

Django中的认证与权限 源码剖析

rest_framework/request.py中部分认证和权限代码 def _authenticate(self):"""Attempt to authenticate the request using each authentication instancein turn."""for authenticator in self.authenticators:try:user_auth_tuple authentica…

IQueryable和IEnumerable区别

IQueryable 和IEnumerable总结 1&#xff0c;IEnumerable<T> result (from t in context.Table order by t.Id select c).AsEnumerable().Take(3) 如果返回的是IEnumerable<T>类型的是预先把数据都加载在内存中在取出前三条数据 2&#xff0c;IQueryable<T&g…

xz压缩和解压缩

xz和gzip&#xff0c; bzip2用法是一样的。默认系统是没有安装这个压缩工具的&#xff0c;安装命令为&#xff1a;yum install -y xz语法&#xff1a;xz [-dz] filename-d&#xff1a;解压缩-z&#xff1a;压缩压缩时&#xff0c;可以加“-z”也可以不加&#xff0c;都可以压缩…

celery 学习笔记定时任务和异步任务

1、Celery加入异步和定时任务 Celery除了可以异步执行任务之外&#xff0c;还可以定时执行任务。在实例代码的基础上写个测试方法&#xff1a; import datetime import timefrom celery import shared_task from celery.schedules import crontab from celery.task import pe…

FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类

一. 概念 FBV&#xff08;function base views&#xff09; 顾名思义基于函数的视图类 CBV&#xff08;class base views&#xff09;基于类的视图类 至于区别呢? 我觉得只是写法上的不一样, 实现的结果都是一样的, 我比较喜欢用CBV模式, 因为在Django中内部帮我做了请求方式…