ConfigParser

功能介紹

 

         在程序中使用配置文件來靈活的配置一些參數是一件很常見的事情,配置文件的解析並不複雜,在python裏更是如此,在官方發佈的庫中就包含有做這件事情的庫,那就是ConfigParser,這裏簡單的做一些介紹。
        ConfigParser解析的配置文件的格式比較象ini的配置文件格式,就是文件中由多個section構成,每個section下又有多個配置項。

 

方法介紹:

 

Class RawConfigParser([defaults])
基本配置類,當傳遞defaults時,會初始化到內置字典中。該類不支持智能修復,2.3版本新特徵。

Class ConfigParser([defaults])
繼承之RawConfigParser類,實現了智能特性,爲get(),items()方法添加了可選參數。Defaults中的值必須能填補“%()s”。注意__name__是內置的default;該值是section的名稱,它會被defaults提供的任何值所覆蓋。

所以的用於填補的option名稱都會通過optionxform()方法傳遞,就像其他任何option名稱一樣。例如,使用optionxform()的默認實現(將option名稱轉化成小寫),“foo %(bar)s”和“foo %(BAR)s”的值相等。

Class SafeConfigParser([defaults])
繼承至ConfigParser,實現了更多智能特徵,實現更有可預見性,新的應用更偏好這個版本,如果他們不需要對python老版本的兼容性,2.3版本。

Exception NoSectionError
當沒有發現給定section時拋出。

Exception DuplicateSectionError
如果add_section()方法被調用時,提供的section參數的值已經存在時拋出。

Exception NoOptionError
指定option不存在時拋出。

Exception InterpolationError
執行字符串填補時拋出的異常的基類。

Exception InterpolationDepthError
當填補字符串因爲迭代次數超過了MAX_INTERPOLATION_DEPTH值時拋出的異常,InterpolationError的子類。

Exception InterpolationMissingOptionError 
當option引用的值不存在時拋出,該異常爲InterpolationError的子類,2.3版本新加。

Exeption InterpolationSyntaxError
當原文件格式沒有遵守規定的語法時拋出的異常,繼承至InterpolationError,2.3版本。

Exception MissingSectionHeaderError
嘗試解析沒有section頭的文件時拋出。

Exception ParsingError
解析文件時發生錯誤。

MAX_INTERPOLATION_DEPTH
get()方法當raw參數爲false時,遞歸的對大深度。只適用與ConfigParser類。

RawConfigParser對象

RawConfigParser實例的方法:

defaults()
返回全部示例中所以defaults。

sections()
返回有效的section列表,DEFAULT不包含在列表中。

add_section(section)
爲實例添加一個section,如果給定的section名已經存在,將拋出DuplicateSectionError異常。

has_section(section)
判斷給定的section名在配置文件中是否存在,DEFAULT section不包括。

options(section)
返回給定的section下的所有可用option的列表。

has_option(section, option)
如果section存在,幷包含給定的option,返回true,放在返回false, 1.6版本新增。

read(filenames)
嘗試解析文件列表,如果解析成功返回文件列表。如果filenames是string或Unicode string,將會按單個文件來解析。如果在filenames中的文件不能打開,該文件將被忽略。這樣設計的目的是,讓你能指定本地有可能是配置文件的列表(例如,當前文件夾,用戶的根目錄,及一些全系統目錄),所以在列表中存在的配置文件都會被讀取。如果文件都不存在,那麼ConfigParser實例會包含空數據集。一個需要從配置文件讀取初始化數據的應用程序,應該使用readfp()方法來加載所需要的文件,之後可以使用read()方法來獲取任何可能的文件:

import ConfigParser, os config = ConfigParser.ConfigParser()config.readfp(open(‘defaults.cfg’)) config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])

2.4版本之後,返回成功解析的文件列表。

readfp(fp[, filename])
從文件或fp(值使用該對象的readline()方法)中的似文件類讀取並解析配置數據,如果filename被省略,fp有一個name屬性,該屬性用於獲取filename;默認是“<???>”。

get(section, option)
獲取section下option的值。

getint(section, option)
強制指定section下的option的值,作爲Int類型返回的方便方法。

getfloat(section, option)
強制section下的option值,作爲float類型返回的方法方法。

getboolean(section, option)
強制section下的option值,作爲布爾類型返回的方法方法。注意可接受的option的true值有“1”,“yes”,“true”及“on”,可接受的false值有“0”,“no”,“false”,“off”。字符串值不檢測大小寫,其他值會拋出ValueError異常。

itmes(section)
返回給定section下的所以option的(name, value)對列表。

set(section, option, value)
如果給定的setion存在,爲option設定給定的值;否則拋出NoSectionError異常。當可能使用RawConfigParser(或者ConfigParser的參數raw爲true)來在內部存儲非字符串值,所以功能(包括填補和輸出到文件)只能使用字符串值來歸檔。1.6版本新增。

write(fileobject)
將配置表示寫入指定文件類,該表示以後可以通過調用read()來解析,1.6版本新增。

remove_option(section, option)
從指定section中刪除指定option,如果section不存在,拋出NoSectionError異常;如果option存在,則刪除,並返回True;否則返回false。1.6版本新增。

remove_section(section)
從配置文件中刪除指定的section,如果section確實存在,返回true,否則返回false。

optionxform(option)
將輸入文件中,或客戶端代碼傳遞的option名轉化成內部結構使用的形式。默認實現返回option的小寫形式;子類可能重寫該方法或客戶端代碼可能將該方法作爲實例的屬性,以此來影響它的行爲。將此用於str(),例如,會使option名稱大小寫敏感。

ConfigParser對象

ConfigParser類擴展了RawConfigParser的一些接口方法,添加了一些可選參數。

get(section, option [, raw[, vars]])
獲取給定section下的option的值,所以“%”佔位符在返回值中被填補,基於構造時傳遞的默認值,就像option,vars也被提供,除非raw參數爲true。

items(section, [, raw[, vars]])
返回給定section下的所以option的(name, value)對列表。可選參數同get方法,2.3版本新增。

SafeConfigParser對象

SafeConfigParser類實現了ConfigParser相同的接口,新增如下方法:

set(section, option, value)
如果給定的section存在,給option賦值;否則拋出NoSectionError異常。Value值必須是字符串(str或unicode);如果不是,拋出TypeError異常,2.4版本新增。

 

實際應用:

 

比如:

[db]
db_host=127.0.0.1
db_port=3306
db_user=root
db_pass=password
[concurrent]
thread=10
processor=20

    假設上面的配置文件的名字爲test.conf。裏面包含兩個section,一個是db, 另一個是concurrent, db裏面還包含有4項,concurrent裏面有兩項。這裏來做做解析:

#-*- encoding: gb2312 -*-
import ConfigParser
import string, os, syscf = ConfigParser.ConfigParser()
cf.read(“test.conf”)
# 返回所有的section
s = cf.sections()
print ’section:’, s

o = cf.options(“db”)
print ’options:’, o

v = cf.items(“db”)
print ’db:’, v

print ’-'*60
#可以按照類型讀取出來
db_host = cf.get(“db”, ”db_host”)
db_port = cf.getint(“db”, ”db_port”)
db_user = cf.get(“db”, ”db_user”)
db_pass = cf.get(“db”, ”db_pass”)

# 返回的是整型的
threads = cf.getint(“concurrent”, ”thread”)
processors = cf.getint(“concurrent”, ”processor”)

print ”db_host:”, db_host
print ”db_port:”, db_port
print ”db_user:”, db_user
print ”db_pass:”, db_pass

print ”thread:”, threads
print ”processor:”, processors
#修改一個值,再寫回去
cf.set(“db”, ”db_pass”, ”zhaowei”)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章