python常用模块:configParser

1、简介

  configparser用于配置文件解析,可以解析特定格式的配置文件,多数配置文件的格式为XXX.ini。该模块的作用就是使用模块中的RawConfigParser()、ConfigParser()、SafeConfigParser()这三个方法(三者选择其一),创建一个对象使用对象的方法对指定的配置文件做增删改查操作。其中RawConfigParser是最基础的ini文件读取类,ConfigParser、SafeConfigParser支持对%(value)s变量的解析。

2、常见异常

异常

描述

NoSettionError

指定的section没有找到

DuplicateSectionError

调用add_section() 时,section名称已经被使用

NoOptionError

指定的参数没有找到

InterpolationError

当执行字符串插值时出现问题时,出现异常的基类

InterpolationDepthError

当字符串插值无法完成时,因为迭代次数超过了最大的范围,所以无法完成。InterpolationError的子类

InterpolationMissingOptionError

当引用的选项不存在时,会出现异常。InterpolationError的子类

InterpolationSyntaxError

当产生替换的源文本不符合所需的语法时,就会出现异常。InterpolationError的子类

MissingSectionHeaderError

当试图解析一个没有分段标题的文件时,会出现异常

ParsingError

当试图解析文件时发生错误时,会出现异常

MAX_INTERPOLATION_DEPTH

当raw参数为false时,get()的递归插值的最大深度。这只适用于ConfigParser类


3、RawConfigParser对象

  RawConfigParser的操作可以分为两大类,一种是对配置文件的操作,另外一种是对读取后数据流的操作。

3.1、对配置文件的操作

方法

描述

read(filenames)

filesnames是一个列表,需要从文件加载初始值的应用程序应该在调用read()之前使用readfp()加载所需的文件或文件

readfp(fp[, filename])

在fp中,从文件或文件类对象中读取和解析配置数据(只使用readline()方法)。如果文件名被省略,并且fp有一个name属性,它被用于文件名;默认值为< ? >

write(fileobject)

将配置的表示写入指定的文件对象。这个表示可以由未来的read()调用解析

3.2、对内存中的数据流的操作

方法

描述

add_section(section)

向实例添加一个section

remove_option(section, option)

从指定的部分中删除指定的选项。如果该部分不存在,请提出NoSectionError。如果存在的选项被删除,返回True;否则返回False

remove_section(section)

从配置中删除指定的section。如果这个部分确实存在,返回True,否则返回False

set(section, option, value)

如果给定的部分存在,将给定的选项设置为指定的值

optionxform(option)

也可以在一个实例上重新设置它,对于一个需要字符串参数的函数。例如,将其设置为str,将使选项名称区分大小写

defaults()

返回包含实例范围默认值的字典

sections()

返回可用的section的列表;默认section不包括在列表中

has_section(section)

指示指定的section是否出现在配置中。默认的section未被确认

options(section)

返回指定section中可用的选项列表

has_option(section, option)

如果给定的section存在,并且包含给定的选项,则返回True;否则返回False

get(section, option)

为指定的section获取一个选项值

getint(section, option)

它将指定section中的选项强制转换为整数

getfloat(section, option)

它将指定section中的选项强制转换为浮点型

getboolean(section, option)

强制转换为布尔型,”1”, “yes”, “true”, and “on”, 转换为True,”0”, “no”, “false”, and “off”, 转换为False, 其他返回ValueError

items(section)

返回给定section中每个选项的(name,value)对的列表

4、ConfigParser和SafeConfigParser对

  set(section,option,value)如果给定的部分存在,将给定的选项设置为指定的值,否则返回NoSectionError。值必须为字符串,如果没有,则会出现类型错误。

5、RawConfigParser示例

  写配置文件示例

import configparser

config = configparser.RawConfigParser()


config.add_section('Section1')
config.set('Section1', 'an_int', '15')
config.set('Section1', 'a_bool', 'true')
config.set('Section1', 'a_float', '3.1415')
config.set('Section1', 'baz', 'fun')
config.set('Section1', 'bar', 'Python')
config.set('Section1', 'foo', '%(bar)s is %(baz)s!')


# Writing our configuration file to 'example.ini'
with open('example.ini', 'w') as configfile:
    config.write(configfile)

  读配置文件示例

import configparser

config = configparser.RawConfigParser()
config.read('example.ini')


a_float = config.getfloat('Section1', 'a_float')
an_int = config.getint('Section1', 'an_int')
print(a_float + an_int)


if config.getboolean('Section1', 'a_bool'):
    print (config.get('Section1', 'foo'))

6、ConfigParser示例

 配置文件example.ini文件

[section1]      
name = jim
age = 18
  
[section2]
name:python
age = 9
 
#### 文件格式说明 #########
[XXX]  代表节点
XX = XX 或者 XX : XX 代表参数

修改配置文件

import configparser       # 导入模块
config = configparser.ConfigParser()   # 创建对象
config.read("user.ini", encoding="utf-8")  # 读取配置文件,如果配置文件不存在则创建
# 查看
secs = config.sections()  # 获取所有的节点名称
print(secs)
# ['section1', 'section2']
options = config.options('section1')  # 获取指定节点的所有key
print(options)
# ['name', 'age']
item_list = config.items('section1')  # 获取指定节点的键值对
print(item_list)
#[('name', 'wang'), ('age', '18')]

val = config.getint('section1', 'age')  # 获取节点section1的age属性,属性需要是int型,否则ValueError
print(val)
# 18
val = config.has_section('section1')  # 检查指定节点是否存在,返回True或False
print(val)
# True
val = config.has_option('section1', 'age')  # 检查指定节点中是否存在某个key,返回True或False
print(val)
#True
 
# 增删改
config.add_section("node")  # 添加一个节点,节点名为node, 此时添加的节点node尚未写入文件
config.write(open('user.ini', "w"))  # 将添加的节点node写入配置文件
 
config.remove_section("node")  # 删除一个节点,节点名为node, 删掉了内存中的节点node
config.write(open("user.ini", "w"))  # 将删除节点node后的文件内容回写到配置文件
 
config.set("section1", "k1", "v1")  # 在已存在的节点中添加一个键值对k1 = v1 ,如果该节点不存在则报错,如果key已经存在,则修改value
# configparser.NoSectionError: No section: 'section'
config.write(open("user.ini", "w"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值