Python configparser標準庫簡介

如果你要使用Python處理類似ini這種格式的文件,那麼肯定離不開configparser標準庫,它使用起來很簡單而且非常方便。下面就讓我們來看看吧。

簡單讀寫

讀寫ini文件非常簡單,來看看下面的例子就明白了。首先要創建ConfigParser的實例,使用它則非常簡單,基本上就和處理字典完全一樣。處理完畢之後,調用ConfigParser的write方法並傳遞一個文件就可以將其保存下來了。讀取時候更加簡單,直接向read方法傳遞文件名即可。

import configparser

config_filename = 'config.ini'

config = configparser.ConfigParser()
config['default'] = {'name': '易天', 'age': 30, 'gender': 'male'}
config['young'] = {'name': 'yitian', 'age': 20}

with open(config_filename, 'w', encoding='utf8')as file:
    config.write(file)

config2 = configparser.ConfigParser()
config2.read(config_filename, encoding='utf8')
for section in config2.sections():
    print(f'[{section}]')
    for key in config2[section]:
        print(f'{key} = {config2[section][key]}')

'''
[default]
name = 易天
age = 30
gender = male
[young]
name = yitian
age = 20
'''

另外還有幾個read函數,用於從其他地方讀取配置。

  • read_file,從文件讀取配置,參數是一個已經打開的文件
  • read_string,從字符串讀取配置,參數是一個配置字符串
  • read_dict,從字典讀取配置,參數是一個字典

處理數據類型

所有的數據類型都是字符串類型,如果你需要使用其他數據類型,需要自己手動轉換。不過你也可以使用getXXX函數來直接獲取某種類型的數據,這樣的函數有getint、getfloat、getbooloean,如果你需要的話,還可以自己添加自定義數據類型的處理函數。

print(type(config['default']['age']))
print(type(int(config['default']['age'])))
print(type(config['default'].getint('age')))
'''
<class 'str'>
<class 'int'>
<class 'int'>
'''

默認值和備用值

在獲取值的時候,假如沒有這個值,我們可以給get參數添加第二個值來獲得一個備用值,這種方法對於getint、getfloat、getboolean方法等同樣適用。

但是如果配置文件中存在DEFAULT章節,而且默認章節設置了某個值的話,就會用這裏的默認值取代備用值,因此在使用的時候大家要注意一下。

字符串插入

配置文件中可以引用其他選項,可以通過在ConfigParser構造函數中傳入interpolation參數來進行控制。

c = configparser.ConfigParser(
    interpolation=configparser.ExtendedInterpolation())
c.read_string(s)
print(c['young']['age'])

默認的插入是configparser.BasicInterpolation(),可以處理%(value)s格式的選項。這裏的第二個age的值會是yitian2.

[DEFAULT]
name = yitian
age = 25
[young]
name = yitian2
age = %(name)s

還有一種是configparser.ExtendedInterpolation(),功能更強,可以引用其他章節的選項。它的格式是${value}。這裏的第二個age會是yitian,如果要引用本章節的選項,可以省去section:章節,只保留變量名。

[DEFAULT]
name = yitian
age = 25
[young]
name = yitian2
age = ${DEFAULT:name}

如果不需要任何插入和轉換,可以直接將interpolation指定爲None,這樣ConfigParser就會原樣讀取字符串。

c = configparser.ConfigParser(interpolation=None)

實用函數

ConfigParser還包含了一些使用函數,在我們處理配置文件的時候非常有用。

函數名 作用
sections() 返回所有章節組成的列表,不包括默認章節
add_section(section) 添加一個新的章節
has_section(section) 判斷該章節是否存在
options(section) 返回該章節下的所有選項列表
has_options(section,option) 判斷給定章節下是否存在某選項
remove_options(section,option) 刪除給定章節下的某個選項
remove_section(section) 刪除某個章節

還有一些函數不太常用,這裏我就不介紹了。對於大部分情況,其實上面這些已經足夠用了。

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