python configparser模块_python configparser模块

简介

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

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

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

格式:

[section]

name=value

或者

name: value"#" 和";"表示注释

[DEFAULT]#设置默认的变量值,初始化

[My Section]

foodir: %(dir)s/whatever

dir=frob

long: this value continues in the next line

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

方法:

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

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

RawConfigParser()

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

defaults : 如果指定默认值,则使用默认值的键值对

dict_type:使用新的section的键值对

allow_no_value :默认是False,如果是True,表示可以接收空值(None)return:对象

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

ConfigParser()

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

在default中必须出现%()s

SafeConfigParser()

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

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

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

常见异常:

异常描述

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类

RawConfigParser 对象

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

对配置文件的操作

读取配置文件:

方法描述

read(filenames)

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

readfp(fp[, filename])

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

写入配置文件:

方法描述

write(fileobject)

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

对内存中数据流的操作

增加配置文件中的值:

方法描述

add_section(section)

向实例添加一个section

删除配置文件中的值:

方法描述

remove_option(section, option)

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

remove_section(section)

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

修改配置文件中的值:

方法描述

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”, 转换为Falseo 其他返回ValueError.

items(section)

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

importConfigParser, os

config=ConfigParser.ConfigParser()

config.readfp(open('defaults.cfg'))

config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])

cfgparser =ConfigParser()

...

cfgparser.optionxform= str

ConfigParser对象

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

方法描述

get(section, option[, raw[, vars]])

为指定的section获取一个选项值。如果提供了vars,它必须是一个字典。该选项在vars(如果提供)、分段和默认值中查找,

items(section[, raw[, vars]])

返回给定section中每个选项的(名称、值)对的列表

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

SafeConfigParser对象

set(section, option, value)

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

实例:

ContractedBlock.gif

ExpandedBlockStart.gif

importConfigParser

config=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)

实例一:写配置文件

ContractedBlock.gif

ExpandedBlockStart.gif

importConfigParser

config=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 types

a_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')

实例二:读配置文件

ContractedBlock.gif

ExpandedBlockStart.gif

importConfigParser

config=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'})

实例三:获取插入值

ContractedBlock.gif

ExpandedBlockStart.gif

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

importConfigParser#New instance with 'bar' and 'baz' defaulting to 'Life' and 'hard' each

config = 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!"

实例四:默认值

ContractedBlock.gif

ExpandedBlockStart.gif

defopt_move(config, section1, section2, option):try:

config.set(section2, option, config.get(section1, option,1))exceptConfigParser.NoSectionError:#Create non-existent section

config.add_section(section2)

opt_move(config, section1, section2, option)else:

config.remove_option(section1, option)

实例五:在各section之间移动选项

ContractedBlock.gif

ExpandedBlockStart.gif

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

>>> importConfigParser>>> importio>>> 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'

实例六:配置文件中有空值

ContractedBlock.gif

ExpandedBlockStart.gif

with open('config',encoding='utf-8') as f:for line inf:if line.startswith('userinfo'):

key,value= line.split('=')print(value.strip())importconfigparser

config=configparser.ConfigParser()

config["DEFAULT"] = {'ServerAliveInterval': '45','Compression': 'yes','CompressionLevel': '9','ForwardX11':'yes'}

config['bitbucket.org'] = {'User':'hg'}

config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}

with open('example.ini', 'w') as configfile:

config.write(configfile)importconfigparser

config=configparser.ConfigParser()print(config.sections()) #[]

config.read('example.ini')print(config.sections()) #['bitbucket.org', 'topsecret.server.com']

print('bytebong.com' in config) #False

print('bitbucket.org' in config) #True

print(config['bitbucket.org']["user"]) #hg

print(config['DEFAULT']['Compression']) #yes

print(config['topsecret.server.com']['ForwardX11']) #no

print(config['bitbucket.org']) #

for key in config['bitbucket.org']: #注意,有default会默认default的键

print(key)print(config.options('bitbucket.org')) #同for循环,找到'bitbucket.org'下所有键

print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对

print(config.get('bitbucket.org','compression')) #yes get方法Section下的key对应的value

另一种,把路径写在文件里,及一些操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值