python3配置文件解析模块configparser简介

configparser模块提供了解析类似ini文件结构的api,可以非常方便的对文件进行读写以及定制化。此模块不支持Windows注册表扩展版的INI语法中使用的值类型前缀。

文件结构

如下为一个最简单的ini文件结构。ini文件实际上是由多个部分(section)以及可选的注释组成的,每个部分都包含一些用指定分隔符分隔的键值对选项。

;comment
#another comment
[DEFAULT]
updated=yes

[Liechtenstein]
rank=2
year=2008
gdppc=141100
updated=false
neighbor=Austria,Switzerland

[Singapore]
rank=5
year=2011
gdppc=59900

每个部分以一个标题开始,标题名用“[]”包围,如上“DEFAULT”、“Liechtenstein”和“Singapore”。默认情况下,标题名是区分大小写的。

每部分中每个选项的键和值默认情况下使用“=”或“:”分隔。选项的键不区分大小写。值的前后空白符会被忽略。如果分隔符后没有任何有效字符或者分隔符也被省略,则表示空值。值可以跨行,只要其他行缩进比第一行更深。根据解析器的模式不同,空行可以被视为多行值的一部分,也可以被忽略。

注释默认以“;”或“#”开头,注释可以是单独的部分(section)也可以是在单独的空行上,并且可以缩进。

数据类型

文件中的值总是按字符串保存,所以如果需要其他类型的值需要自己进行转换。configparser提供了简便的方法来获取整型(getint)、浮点型(getfloat)和布尔型(getboolean)数据。对于getboolean方法,configparser值支持“1/0”、“yes/no”、“on/off”、“true/flase”这四组不区分大小写的值。除此之外的值都认为是非法的布尔值。

默认值

文件中可以包含一个特殊的部分,其中包含的键值对视为默认值。configparser默认此部分的标题为DEFAULT。在其他部分获取指定键的值时,如果不存在,则会在默认部分查找,如果默认部分中存在,则返回默认值。如上,如果在试图获取Singapore中的updated的值时,由于Singapore中不存在键updated,则会返回DEFAULT中键updated对应的值。

回退值

在使用configparser模块的一系列get方法时,可以通过fallback关键字提供一个回退值。在指定部分和默认部分都找不到指定的键时返回回退值。默认值优先级高于回退值,所以当存在默认值时,即使指定了回退值也会返回默认值。

简单示例

写文件

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import configparser
config = configparser.ConfigParser()
config['DEFAULT']={"updated":"yes"}
config.add_section('Liechtenstein')
config['Liechtenstein']['rank']='2'
config.set('Liechtenstein','year','2008')
config['Liechtenstein'].update({'gdppc':'141100','updated':'false'})
config.set('Liechtenstein','Neighbor','Austria,Switzerland')
config['Singapore']={'rank':'5','year':'2011','gdppc':'59900'}
with open('demo.ini', 'w') as configfile:
	config.write(configfile)

读文件

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import configparser
config = configparser.ConfigParser()
config.read('demo.ini')
print("sections:",config.sections())
print("DEFAULT:",config.defaults())
print("has section Liechtenstein:",config.has_section("Liechtenstein"))
print("options in Liechtenstein:",config.options("Liechtenstein"))
print("Liechtenstein has option Rank:",config.has_option("Liechtenstein","Rank"))
print("updated in Singapore:",config.getboolean("Singapore","updated"))
print("neighbor in Singapore:",config.get("Singapore","neighbor",fallback="no neighbor"))
print("rank in Liechtenstein:",config.getint("Liechtenstein","Rank"))
print("================sections===================")
sectionItems=config.items()
for section,proxy in sectionItems:
	print(section,"=",proxy)
	for option in proxy:
		print(option,"=",proxy.get(option))
	print("-------------------------------------------")
print("================sections===================")
config.set("Liechtenstein","Rank","55")
print("==========Liechtenstein options============")
liechtensteinOptions=config.items("Liechtenstein")
for option,value in liechtensteinOptions:
	print(option,"=",value)
print("==========Liechtenstein options============")

你可能感兴趣的:(Python,configparser,文件结构,数据类型,读写文件)