【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 ConfigParser

cf = 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參數,否則會報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM