本文主要介绍在Python中,Python2和Python3使用ConfigParser,读取配置文件(.ini)方法及使用示例代码。

1、Python2中读写配置文件

1) 写配置文件示例代码

import ConfigParser
config = ConfigParser.RawConfigParser()
# 在添加部分或项时,按相反的顺序添加它们
# 您希望它们在实际文件中如何显示。
# 另外,请注意使用RawConfigParser和raw
# 您可以指定ConfigParser各自的set函数的#模式
# 非字符串值键内部,但将收到一个错误
# 当你试图写一个文件或当你得到它的非原始
# 模式。SafeConfigParser不允许进行这样的赋值。
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)

2) 读配置文件示例代码

使用RawConfigParser()

import ConfigParser
config = ConfigParser.RawConfigParser()
config.read('example.cfg')
# getfloat() 如果该值不是一个浮点数,则引发一个异常
# getint()和getboolean()也对它们各自的类型执行此操作
a_float = config.getfloat('Section1', 'a_float')
an_int = config.getint('Section1', 'an_int')
print a_float + an_int
# 注意,下一个输出没有插入'%(bar)s'或'%(baz)s'。
# 这是因为我们使用的是RawConfigParser()。
if config.getboolean('Section1', 'a_bool'):
    print config.get('Section1', 'foo')

使用ConfigParser()

import ConfigParser
config = ConfigParser.ConfigParser()
config.read('example.cfg')
# 如果您希望使用原始模式,请设置get的第三个可选参数为1。
print config.get('Section1', 'foo', 0)  # -> "Python is fun!"
print config.get('Section1', 'foo', 1)  # -> "%(bar)s is %(baz)s!"
# 可选的第四个参数是一个dict,其成员将接受
# 插补优先。
print config.get('Section1', 'foo', 0, {'bar': 'Documentation',
                                        'baz': 'evil'})

参考文档https://docs.python.org/2.7/library/configparser.html

2、Python3中读写配置文件

主要由于向后兼容性的考虑,configparser还提供了一个具有显式get/set方法的遗留API。虽然下面列出的方法有有效的用例,但是映射协议访问是新项目的首选。遗留API有时更高级、更低级,而且完全违反直觉。

1) 写入配置文件

import configparser
config = configparser.RawConfigParser()
# 请注意,使用RawConfigParser的set函数,您可以分配
# 非字符串值键内部,但将收到一个错误时
# 试图写入文件或在非原始模式下写入文件。设置
# 使用映射协议或ConfigParser的set()不允许使用#值
# 这样的分配将会发生。
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!')
# 写进配置文件 'example.cfg'
with open('example.cfg', 'w') as configfile:
    config.write(configfile)

2) 读取配置文件

使用RawConfigParser()

import configparser
config = configparser.RawConfigParser()
config.read('example.cfg')
# getfloat() 如果该值不是一个浮点数,则引发一个异常
# getint()和getboolean()也对它们各自的类型执行此操作
a_float = config.getfloat('Section1', 'a_float')
an_int = config.getint('Section1', 'an_int')
print(a_float + an_int)
# 注意,下一个输出没有插入'%(bar)s'或'%(baz)s'。
# 这是因为我们使用的是RawConfigParser()。
if config.getboolean('Section1', 'a_bool'):
    print(config.get('Section1', 'foo'))

使用ConfigParser()

import configparser
cfg = configparser.ConfigParser()
cfg.read('example.cfg')
# 如果您想禁用get(),可以将它的可选*raw*参数设置为True
# 单get操作中的插值表达式。
print(cfg.get('Section1', 'foo', raw=False))  # -> "Python is fun!"
print(cfg.get('Section1', 'foo', raw=True))   # -> "%(bar)s is %(baz)s!"
# 可选的*vars*参数是一个dict,其成员将接受
# 插补优先。
print(cfg.get('Section1', 'foo', vars={'bar': 'Documentation',
                                       'baz': 'evil'}))
# 可选的*回退*参数可用于提供回退值
print(cfg.get('Section1', 'foo'))
      # -> "Python is fun!"
print(cfg.get('Section1', 'foo', fallback='Monty is not.'))
      # -> "Python is fun!"
print(cfg.get('Section1', 'monster', fallback='No such things as monsters.'))
      # -> "No such things as monsters."
# 没内容print(cfg.get('Section1', 'monster'))将引发NoOptionError
# 但是我们也可以用:
print(cfg.get('Section1', 'monster', fallback=None))
      # -> None

默认值在这两种configparser中都可用。如果在其他地方没有定义所使用的选项,则将它们用于插值

import configparser
# 例如"bar"和"baz"分别默认为"Life"和"hard"
config = configparser.ConfigParser({'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!"

参考文档https://docs.python.org/3.7/library/configparser.html