configparser模块
python中configparser模块用来读写配置文件,可以支持.conf,.ini等配置文件格式。使用configparser模块可以使程序更加灵活,比如说,你想在你的python程序中实现数据库的连接,这时候你的用户名密码等都可以写入配置文件中,在程序中读取就可以了。如果别人也想用你的程序,也只需要修改配置文件,避免了修改源码。好处多多,接下来看看怎么使用它。(python2中该模块是ConfigParser)
1.配置文件的内容
配置文件的内容,是一个[section]作为头部,后面跟着“name : value”或“name = value”这样的形式。
下面是一个config.ini配置文件中的内容:
[db]
host = localhost
port = 3306
user = root
password = root
database = test
[log]
login = True
logout = False
[path]
include = %(prefix)s/include
lib = %(prefix)s/lib
prefix = /usr/local
这里面的“=”都可以换为“:”。
2.configparser读取配置文件常用函数
#读取配置文件内容
read(filename)
#获取配置文件中所有的section,并以列表的形式返回
sections()
#获取该section下的所有option并以列表的形式返回(option就是等号左边的那一列)
options(section)
#获取该section下的所有键值对,以列表的形式返回
items(section)
#获取该section下的一个option的值
get(section, option) #返回string类型
getint(section, option) #返回int类型
getfloat(section, option) #返回float类型
getboolean(section, option) #返回boolean类型
#判断配置文件中是否包含该section
has_section(section)
#判断该section下是否包含该option
has_option(section, option)
下面是这些函数的一些例子:
#coding:utf-8
import configparser
cp = configparser.ConfigParser() #实例化一个ConfigParser对象
cp.read('config.ini') #读取config.ini配置文件
sections = cp.sections()
db_opts = cp.options('db')
db_kvs = cp.items('db')
print('所有的section:', sections)
print('db下所有的options:', db_opts)
print('db下所有的键值对:', db_kvs)
port = cp.get('db', 'port')
port_int = cp.getint('db', 'port')
login = cp.getboolean('log', 'login')
print('获取db下指定option port:', port, type(port))
print('获取db下指定option port:', port_int, type(port_int))
print('获取log下指定option login:', login, type(login))
print(cp.has_section('db'))
print(cp.has_section('dbdb'))
print(cp.has_option('db', 'host'))
print(cp.has_option('db', 'pass'))
"""变量替换, 配置文件是按照一个整体被读取的,遇到的变量替换实际上已经是完成替换了的,
例如config.ini中prefix在path中的位置是任意的"""
include = cp.get('path', 'include')
lib = cp.get('path', 'lib')
print('include路径为:', include)
print('lib路径为:', lib)
运行结果为:
所有的section: ['db', 'log', 'path']
db下所有的options: ['host', 'port', 'user', 'password', 'database']
db下所有的键值对: [('host', 'localhost'), ('port', '3306'), ('user', 'root'), ('password', 'root'), ('database', 'test')]
获取db下指定option port: 3306 <class 'str'>
获取db下指定option port: 3306 <class 'int'>
获取log下指定option login: True <class 'bool'>
True
False
True
False
include路径为: /usr/local/include
lib路径为: /usr/local/lib
3.configparser写入配置文件常用函数
#写入配置文件
write()
#添加一个新的section
add_section(section)
#对section下的option进行设置
set(section, option, value)
#删除section
remove_section(section)
#删除section下的option
remove_option(section, option)
下面是一些例子:
#coding:utf-8
import configparser
cp = configparser.ConfigParser() #实例化ConfigParser对象
cp.add_section('database') #添加database并加入一些option
cp.set('database', 'host', '127.0.0.1')
cp.set('database', 'password', 'root')
cp.add_section('log')
cp.set('log', 'login', 'True')
cp.set('log', 'logout', 'False')
f = open('config2.ini', 'w')
cp.write(f)
运行后会得到一个config2.ini配置文件,文件内容如下:
[database]
host = 127.0.0.1
password = root
[log]
login = True
logout = False
对这个config2.ini进行一些删除操作:
#coding:utf-8
import configparser
cp = configparser.ConfigParser()
cp.read('config2.ini')
cp.remove_section('log') #删除整个log
cp.remove_option('database', 'password') #删除database下的password
f = open('config2.ini', 'w') #别忘记用write写入,否则config2.ini不会改变的
cp.write(f)
操作完的config2.ini:
[database]
host = 127.0.0.1
4.其他
configparser可以一次读取多个配置文件,然后合并成一个配置,而且它采用的是后发制人的策略,即以后一个为准,如果读取的几个配置文件中有相同项,则该项的值为最后一个读取进的配置文件中该项的值,下面举个简单的例子:
准备两个配置文件,config.ini内容同上,config2.ini内容如下:
[path]
prefix = /usr/local/ziyuan
现在读取两个配置文件:
#coding:utf-8
import configparser
cp = configparser.ConfigParser()
cp.read('config.ini') #读取第一个配置文件
include = cp.get('path', 'include')
print('include的路径是:', include)
cp.read('config2.ini') #读取第二个配置文件
include = cp.get('path', 'include')
print('include的路径是:', include)
运行结果:
include的路径是: /usr/local/include
include的路径是: /usr/local/ziyuan/include
参考:https://python3-cookbook.readthedocs.io/zh_CN/latest/c13/p10_read_configuration_files.html