博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python拓展12(使配置文件生效ConfigParser模块)
阅读量:4698 次
发布时间:2019-06-09

本文共 7424 字,大约阅读时间需要 24 分钟。

1、简介

  ConfigParser模块在python3中修改为configparser.这个模块定义了一个ConfigParser类,该类的作用是使用配置文件生效,配置文件的格式和windows的INI文件的格式相同

该模块的作用 就是使用模块中的RawConfigParser()ConfigParser() SafeConfigParser()这三个方法,创建一个对象使用对象的方法对指定的配置文件做增删改查 操作。

配置文件有不同的片段组成和Linux中repo文件中的格式类似:

1.1、格式:

[section] name=value或者name: value"#" 和";" 表示注释[DEFAULT] #设置默认的变量值,初始化
[My Section]foodir: %(dir)s/whateverdir=froblong: this value continues   in the next line

%(dir)s 会被frob代替。默认值会以字典的形式传递给ConfigParser的构造器。section一般存放的哦内置目录下,如果切换到其他的目录需啊哟指定存放位置。

2、方法

  下面这三种方式使用时,切记注意 

  在调用这三个函数时,切记这三个函数会将调用optionxform(),在传递键值对数据时,会将键名 全部转化为小写

2.1、RawConfigParser()

ConfigParser.RawConfigParser([defaults[, dict_type[, allow_no_value]]]) defaults : 如果指定默认值,则使用默认值的键值对dict_type:使用新的section的键值对allow_no_value :默认是False,如果是True,表示可以接收空值(None)return:对象

不支持可变参数,在section中不能存在%()s

2.2、ConfigParser()

ConfigParser.ConfigParser([defaults[, dict_type[, allow_no_value]]])

  在default中必须出现%()s

2.3、SafeConfigParser()

ConfigParser.SafeConfigParser([defaults[, dict_type[, allow_no_value]]])

  更加智能化,在section中是否存在%()s会自动判断

  传递参数使用函数optionxform(),foo %(bar)s 和 foo %(BAR)s是相同的,optionxform()会将大写字母全部转换为小写。

3、常见异常

异常 描述
ConfigParser.Error 所有异常的基类
ConfigParser.NoSectionError 指定的section没有找到
ConfigParser.DuplicateSectionError 调用add_section() 时,section名称已经被使用
ConfigParser.NoOptionError 指定的参数没有找到
ConfigParser.InterpolationError 当执行字符串插值时出现问题时,出现异常的基类
ConfigParser.InterpolationDepthError 当字符串插值无法完成时,因为迭代次数超过了最大的范围,所以无法完成。InterpolationError的子类
InterpolationMissingOptionError 当引用的选项不存在时,会出现异常。InterpolationError的子类
ConfigParser.InterpolationSyntaxError 当产生替换的源文本不符合所需的语法时,就会出现异常。InterpolationError的子类。
ConfigParser.MissingSectionHeaderError 当试图解析一个没有分段标题的文件时,会出现异常。
ConfigParser.ParsingError 当试图解析文件时发生错误时,会出现异常
ConfigParser.MAX_INTERPOLATION_DEPTH 当raw参数为false时,get()的递归插值的最大深度。这只适用于ConfigParser类

4、RawConfigParser 对象

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

4.1、对配置文件的操作

4.1.1、读取配置文件

方法 描述
read(filenames) filesnames是一个列表,需要从文件加载初始值的应用程序应该在调用read()之前使用readfp()加载所需的文件或文件。
readfp(fp[, filename]) 在fp中,从文件或文件类对象中读取和解析配置数据(只使用readline()方法)。如果文件名被省略,并且fp有一个name属性,它被用于文件名;默认值为< ? >。

4.1.2、写入配置文件

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

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

4.2.1、增加配置文件中的值

方法 描述
add_section(section) 向实例添加一个section

4.2.2、删除配置文件中的值

方法 描述
remove_option(section, option) 从指定的部分中删除指定的选项。如果该部分不存在,请提出NoSectionError。如果存在的选项被删除,返回True;否则返回False。
remove_section(section) 从配置中删除指定的section。如果这个部分确实存在,返回True。否则返回假

4.2.3、修改配置文件中的值

方法 描述
set(section, option, value) 如果给定的部分存在,将给定的选项设置为指定的值
optionxform(option) 也可以在一个实例上重新设置它,对于一个需要字符串参数的函数。例如,将其设置为str,将使选项名称区分大小写

4.2.4、查找配置文件中的值

方法 描述
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”, 转换为Falseo 其他返回ValueError.
items(section) 返回给定section中每个选项的(name,value)对的列表。
import ConfigParser, osconfig = ConfigParser.ConfigParser()config.readfp(open('defaults.cfg'))config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])
cfgparser = ConfigParser()...cfgparser.optionxform = str

ConfigParser对象

5.1、SafeConfigParser中包含ConfigParser相同的方法,还有一部分增加的方法

方法 描述
get(section, option[, raw[, vars]]) 为指定的section获取一个选项值。如果提供了vars,它必须是一个字典。该选项在vars(如果提供)、分段和默认值中查找,
items(section[, raw[, vars]]) 返回给定section中每个选项的(名称、值)对的列表

  所有的“%”插值都在返回值中展开,除非原始的参数是真的。内插键的值与选项相同

6、SafeConfigParser对象

  set(section, option, value) 

  如果给定的部分存在,将给定的选项设置为指定的值;否则提高NoSectionError。值必须是字符串(str或unicode);如果没有,则会出现类型错误

7、实例

7.1、写配置文件

import ConfigParserconfig = ConfigParser.RawConfigParser()# When adding sections or items, add them in the reverse order of# how you want them to be displayed in the actual file.# In addition, please note that using RawConfigParser's and the raw# mode of ConfigParser's respective set functions, you can assign# non-string values to keys internally, but will receive an error# when attempting to write to a file or when you get it in non-raw# mode. SafeConfigParser does not allow such assignments to take place.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.cfg'with open('example.cfg', 'wb') as configfile:    config.write(configfile)

7.2、读配置文件

import ConfigParserconfig = ConfigParser.RawConfigParser()config.read('example.cfg')# getfloat() raises an exception if the value is not a float# getint() and getboolean() also do this for their respective typesa_float = config.getfloat('Section1', 'a_float')an_int = config.getint('Section1', 'an_int')print a_float + an_int# Notice that the next output does not interpolate '%(bar)s' or '%(baz)s'.# This is because we are using a RawConfigParser().if config.getboolean('Section1', 'a_bool'):    print config.get('Section1', 'foo')

7.3、获取插入值

import ConfigParserconfig = ConfigParser.ConfigParser()config.read('example.cfg')# Set the third, optional argument of get to 1 if you wish to use raw mode.print config.get('Section1', 'foo', 0)  # -> "Python is fun!"print config.get('Section1', 'foo', 1)  # -> "%(bar)s is %(baz)s!"# The optional fourth argument is a dict with members that will take# precedence in interpolation.print config.get('Section1', 'foo', 0, {
'bar': 'Documentation', 'baz': 'evil'})

7.4、默认值

  所有三种类型的config分析器都可以使用默认值。如果在其他地方没有定义一个选项,那么它们就被用于插值

import ConfigParser# New instance with 'bar' and 'baz' defaulting to 'Life' and 'hard' eachconfig = ConfigParser.SafeConfigParser({
'bar': 'Life', 'baz': 'hard'})config.read('example.cfg')print config.get('Section1', 'foo') # -> "Python is fun!"config.remove_option('Section1', 'bar')config.remove_option('Section1', 'baz')print config.get('Section1', 'foo') # -> "Life is hard!"

7.5、在各section之间移动选项

def opt_move(config, section1, section2, option):    try:        config.set(section2, option, config.get(section1, option, 1))    except ConfigParser.NoSectionError:        # Create non-existent section        config.add_section(section2)        opt_move(config, section1, section2, option)    else:        config.remove_option(section1, option)

7.6、配置文件中有空值

  一些配置文件包含了没有值的设置,但是它与ConfigParser支持的语法相一致。对构造函数的不允许值参数可以被用来表示应该接受这样的值

>>> import ConfigParser>>> import io>>> sample_config = """... [mysqld]... user = mysql... pid-file = /var/run/mysqld/mysqld.pid... skip-external-locking... old_passwords = 1... skip-bdb... skip-innodb... """>>> config = ConfigParser.RawConfigParser(allow_no_value=True)>>> config.readfp(io.BytesIO(sample_config))>>> # Settings with values are treated as before:>>> config.get("mysqld", "user")'mysql'>>> # Settings without values provide None:>>> config.get("mysqld", "skip-bdb")>>> # Settings which aren't specified still raise an error:>>> config.get("mysqld", "does-not-exist")Traceback (most recent call last):  ...ConfigParser.NoOptionError: No option 'does-not-exist' in section: 'mysqld'

 

转载于:https://www.cnblogs.com/L5251/articles/9463219.html

你可能感兴趣的文章
Xcode7 无账号真机测试!!
查看>>
Oracle数据安全解决方案(1)——透明数据加密TDE
查看>>
C++ 中list、vector和deque比较[转]
查看>>
Web API系列之三 基本功能实现
查看>>
preventDefault() 方法 取消事件的默认动作
查看>>
frame.origin和frame.size的心得
查看>>
Fedora17安装SSH
查看>>
mpvue构建小程序(步骤+地址)
查看>>
Android两个控件叠在一起,如何让被挡住的控件显示出来
查看>>
PPT高手博客
查看>>
最小生成树:Kruskal算法 和 Prim算法(第23章)
查看>>
AC-WEB使用HTTPS登录
查看>>
checkbox 的allchose和antichose
查看>>
使用jquery第三方插件(生成曲线图)
查看>>
Django day 36 支付宝支付,微信推送
查看>>
【甘道夫】HBase基本数据操作的详细说明【完整版,精绝】
查看>>
使用BBED恢复数据文件头
查看>>
iOS开发那些事-iOS6苹果地图有用开发
查看>>
JAVA必备——13个核心规范
查看>>
172. Factorial Trailing Zeroes
查看>>