Python 標(biāo)準(zhǔn)庫的 ConfigParser 模塊提供了一套完整的 API 來讀取和操作配置文件撕攒。
文件格式
- 配置文件中包含一個或多個 section,每個 section 都有自己的 option;
- section 用
[sect_name]
表示宫盔,每個option
是一個鍵值對麦撵,使用分隔符 = 或者 : 隔開; - 在
option
分隔符兩端的空格會被忽略掉参淫; - 配置文件使用
#
注釋;
示例配置文件 dbconf.cfg
;
[dbconfig]
# 數(shù)據(jù)庫讀庫鏈接信息
host=127.0.0.1
user=root
passwd=root
database=banma_finance
port=3306
示例配置文件 book.info
[book]
# 標(biāo)題
title: Core Python
version: 2016009021
[hardcopy]
pages:350
操作配置文件
配置文件的讀取
1 實例化 ConfigParser
# 實例化 CoinfigParser 并加載配置文件
# 實例化 dbconf 的解析器
db_config_parser = ConfigParser.SafeConfigParser()
db_config_parser.read('dbconf.cfg')
# 實例化 book_info 的解析器
book_info_parser = ConfigParser.SafeConfigParser()
book_info_parser.read('book.info')
2 讀取文件節(jié)點信息
# 獲取 section 信息
print db_config_parser.sections()
print book_info_parser.sections()
# 打印書籍的大寫名稱
print string.upper(book_info_parser.get("book","title"))
print "by", book_info_parser.get("book","author")
# 格式化輸出 dbconf 中的配置信息
for section in db_config_parser.sections():
print section
for option in db_config_parser.options(section):
print " ", option,"=",db_config_parser.get(section,option)
輸出結(jié)果:
['dbconfig']
['book', 'hardcopy']
CORE PYTHON
by Jack
dbconfig
host = 127.0.0.1
user = root
passwd = root
database = banma_finance
port = 3306
配置文件的寫入
配置文件的寫入與配置文件的讀取方式基本一致,都是先操作對應(yīng)的section
喇澡,然后在 section
下面寫入對應(yīng)的 option
;
# !/usr/bin/python
# coding:utf-8
import ConfigParser
import sys
# 初始化 ConfigParser
config_writer = ConfigParser.ConfigParser()
# 添加 book 節(jié)點
config_writer.add_section("book")
# book 節(jié)點添加 title,author 配置
config_writer.set("book","title","Python: The Hard Way")
config_writer.set("book","author","anon")
# 添加 ematter 節(jié)點和 pages 配置
config_writer.add_section("ematter")
config_writer.set("ematter","pages",250)
# 將配置信息輸出到標(biāo)準(zhǔn)輸出
config_writer.write(sys.stdout)
# 將配置文件輸出到文件
config_writer.write(open('new_book.info','w'))
輸出結(jié)果:
[book]
title = Python: The Hard Way
author = anon
[ematter]
pages = 250
配置文件的更新
配置文件的更新操作,可以說是讀取和寫入的復(fù)合操作殊校。如果沒有最終的 write 操作晴玖,對于配置文件的讀寫都不會真正改變配置文件信息。
# !/usr/bin/python
# coding:utf-8
import ConfigParser
import sys
reload(sys)
sys.setdefaultencoding('UTF-8')
# 初始化 ConfigParser
update_config_parser = ConfigParser.ConfigParser()
update_config_parser.read('new_book.info')
print "section 信息:",update_config_parser.sections()
# 更新作者名稱
print "原作者:",update_config_parser.get("book","author")
# 更改作者姓名為 Jack
update_config_parser.set("book","author","Jack")
print "更改后作者名稱:",update_config_parser.get("book","author")
# 如果 ematter 節(jié)點存在,則刪除
if update_config_parser.has_section("ematter"):
update_config_parser.remove_section("ematter")
# 輸出信息
update_config_parser.write(sys.stdout)
# 覆蓋原配置文件信息
update_config_parser.write(open('new_book.info','w'))