Python学习笔记:configparser(INI格式配置文件解析)

时间:2019-06-09 10:15:10   收藏:0   阅读:144

在平时的开发中感觉INI格式的配置文件使用还是挺需要的,有时会使用一个单独的py来存放一些常量或者配置项,大多时候这样倒是挺好用的,但是如果某些配置项需要在运行时由用户来修改指定,比如很多app在关闭时会有一个弹出框提示“是否关闭”和“下次不再提醒”,这种配置项如果使用INI格式的配置文件来操作的话就会方便很多,Python中操作配置文件的模块为configparser,这个模块可以用来解析与Windows上INI文件结构类似的文件。

官方文档:https://docs.python.org/3/library/configparser.html

看官方文档的时候发现不同Python版本之间某些API还是有些小区别的,所以先说一下,本文使用的是Python3.6。

一个普通的INI配置文件cfg.ini示例如下:

; DEFAULT为默认section,当获取其他section中同名option,而该section又没有这个option时,会取DEFAULT中的该option
[DEFAULT]
close_prompt = yes

[baidu]
website = www.baidu.com

# 本机信息
[home]
ip = 127.0.0.1
port = 8080

 

 INI配置文件组成:

向配置文件中写数据:

# -*- coding:utf-8 -*-
from configparser import ConfigParser

# 使用字典的方式给配置对象添加配置信息
config = ConfigParser()
config[DEFAULT] = {
    close_prompt: yes,
}
config[baidu] = {}
config[baidu][website] = www.baidu.com
config[home] = {}
home = config[home]
home[ip] = 127.0.0.1
home[port] = 8080

# 将配置信息写入文件
with open(cfg.ini, w) as cfg_file:
    config.write(cfg_file)

 

从配置文件中读取数据:

# -*- coding:utf-8 -*-
from configparser import ConfigParser

# 以字典的方式读取配置对象中的数据
config = ConfigParser()

print(config.sections())  # 输出:[]

# 从配置文件中读取数据,如果配置文件中有中文信息,注意编码
config.read(cfg.ini, encoding=utf-8)

print(config.sections())  # 输出:[‘baidu‘, ‘home‘]
print(baidu in config)  # 输出:True
print(config[baidu][website])  # 输出:www.baidu.com

home = config[home]
print(home[ip])  # 输出:127.0.0.1
for key in home:
    print(key)  # 依次输出:ip,port,close_prompt

 

configparser.ConfigParser

从上面的例子可以看出ConfigParser实例可以像操作字典一样去操作它,每个section对应一个由key/value组成的option字典,虽然可以通过添加和设置section和option等方法来操作,但还是推荐使用字典的方式,可读性也要强一点。其实还有另一个解析类RawConfigParser,与ConfigParser的区别在于前者不允许进行字符串的格式化,而且后者也是继承自前者的,所以这里就只讲ConfigParser。(至于还有一个SafeConfigParser,在Python3.2之后就合道ConfigParser中,跟RawConfigParser和ConfigParser的区别在于可以跨section进行字符串的格式化,这里也不讲了)

初始化方法:ConfigParser(defaults=None, dict_type=_default_dict, allow_no_value=False, *, delimiters=(‘=‘, ‘:‘), comment_prefixes=(‘#‘, ‘;‘), inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, default_section=DEFAULTSECT, interpolation=_UNSET, converters=_UNSET):

value字符串格式化:可以使用%(name)s进行字符串的格式化,且name只能是本section和DEFAULT中的option项。

自定义option的key配置方式:如原本是key是自动转化为小写的,现在设置其区分大小写:parser.optionxform = lambda option: option(注意更改操作需要在实例化之后,读取数据之前)。

自定义section自定义配置方式:如原本section是包含了空格以及大小写区分的,现在利用正则表达式设置其去掉首位的空格:parser.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]")(注意更改操作需要在实例化之后,读取数据之前)。

常用方法:

 

原文:https://www.cnblogs.com/guyuyun/p/10965125.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!