python ConfigParser 小试
由于工作需要,需要將數據庫的int型數據轉換成string類型放到頁面上,并從頁面上拿回string類型轉換成可以作為sql查詢參數的int型數據。注,這個string類型的字串和int型數據純屬于人工自定義的編碼行為,因此需要用到config文件。
查到python有ConfigParser,這個還蠻好用的,趕緊試了一下:
1.設計config文件:config.cfg,文件分為很多個section,每個section包含很多對key-value;如下:
[server type] 1= App Server 2= WriteBack Server 3= Memcache Server 4= Database Server[server status] 0= added 1= monitored 2= crashed 3= deleted 4= alerted[alert type] 1= email alert 2= sms alert[server monitor status] 0= Alert 1= Don't Alert
?
2.讀取配置文件:
def readConfig(type, value='1'):config = ConfigParser.ConfigParser()#type = "ServerStatus"value = str(value)try:with open("./static/data/config.cfg","r") as cfgfile:config.readfp(cfgfile)if type == "ServerType":items = dict(config.items('server type'))elif type == "ServerStatus":items = dict(config.items('server status'))elif type == "AlertType":items = dict(config.items('alert type'))elif type == "MonitorStatus":items = dict(config.items('server monitor status'))data = items[value]print datareturn dataexcept Exception:print 'error in readConfig when setting new host string by config file'在每次從數據庫取到數據時,調用這個readConfig方法將拿到的數據進行config成string,再傳到頁面進行顯示。結果很順利!
但是問題也隨之來了,我還要從頁面上拿回這個String傳到后臺作為取數據的sql參數,但是這個與數據庫毫無關系的string如何轉換成int呢?我想了一個dconfig,就是反config回來啦!但是蹊蹺的是,同樣的方法,卻得到了一個int() argument must be a string or a number, not 'NoneType'的錯誤,于是查找定位到我在初始化value這個參數的時候傳了一個空串,然后被當做None,int(None)是不被接受的。改掉,依舊不行。打印傳回來的參數:
alerted App Server于是做了個小測試,發現alerted能找到它的對應值,但是App Server找不到,改成小寫的’app server‘結果又找到了,真是坑爹,去看下文檔有沒有說明不接受大寫字符串,或者是有存在編碼問題?
最后將config的文件里全改成小寫,做測試,好莫名其妙啊!打印出來竟然還是:
alerted App ServerWhy??明明文件已經保存了!難道這cfg文件是要緩存到客戶端里的?不可能,明明是后臺調用的,好吧,我把你刪掉再建一個,放進去小寫,重啟動。ok了!這次變小些了,只是頁面上顯示的還是小寫的,未必符合要求。
?
ConfigParser是個好東西,python的庫就是封裝的好啊!關于config的事情,如果沒有特殊要求,基本上夠用啦。。。。
?
?
忽然想到一個事情,我這典型的交互和需要config的次數太多,我為啥不考慮把config的一個key-value都傳到客戶端嗯?再客戶端顯示的時候用string的value,返回查詢用的int的key,豈不是一舉兩得?
總結
以上是生活随笔為你收集整理的python ConfigParser 小试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET应用程序使用NLog记录日
- 下一篇: 安装sun-java5-jdk 在ubu