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