python configparser模块:读写配置文件

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值