【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.pswp.cn/news/456263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456263.shtml
英文地址,請注明出處:http://en.pswp.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中內部幫我做了請求方式…