1. 概述
ini格式配置文件是一种比较常用的配置文件格式,类似于Windows的ini文件。Python提供了一种标准库 configparser 可以很方便的实现对ini文件的读写操作。
2. configparser库介绍
configparser是Python内置库,无需安装。在Python3中,configparser库已经被重命名为configparser ,在Python2中,可以使用ConfigParser,使用方法基本相同。
2.1 configparser库方法
configparser库提供了三个主要类:
ConfigParser:用于读取和写入INI文件。
SectionProxy:代表ini文件中的段落(section),可读写参数(option)。
Interpolation:处理字符串插值,即用户在字符串中输入变量。
接下来,我们以一个ini文件的读取和写入操作来示范configparser库的使用,同时使用Python中的logging模块来记录日志信息。
3. configparser库的使用
3.1 读取配置文件
使用 ConfigParser 类中的 read() 方法可以读取配置文件的内容。read() 方法中需要传递配置文件名。
import configparser
import logging
logging.disable(logging.CRITICAL) # 禁用日志信息
config = configparser.ConfigParser()
config.read('config.ini')
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
logging.debug('Read config.ini file success!')
print(config.sections())
print(config.get('server', 'ip'))
print(config.getint('server', 'port'))
print(config.getboolean('server', 'debug'))
在这里,我们创建了一个 ConfigParser 对象,并使用 read()方法读取配置文件。通过 sections() 方法可以获取ini文件中的全部段落名, get() 方法可以获取指定段落下的参数值,包括 getint()、getfloat()、getboolean()三种数据类型。
3.2 写入配置文件
文件的写入操作要更复杂一些,需要判断文件是否存在,如果不存在则需要创建文件。另一方面,在写入数据时,需要根据配置文件的格式,确定写入时采用的文件格式并保证合法。比如,要确保每个参数都位于将要写入的段落内。
import configparser
config = configparser.ConfigParser()
config['server'] = {'IP':'127.0.0.1',
'Port':'8080',
'Debug':'True'}
config['database'] = {}
config['database']['User'] = 'root'
config['database']['Password'] = '12345'
with open('config.ini', 'w') as f:
config.write(f)
在这里,我们创建了一个 ConfigParser 对象,并手动创建了两个节点[server], [database]。在节点中定义了多个参数,包括IP、Port、Debug、User、Password。对于新写入的节点和参数,一定要保证在写入前先进行对应的创建。同时,文件写入是通过 Python 的 IO 操作完成的。
4. configparser库的高级特性
4.1 Interpolation
从 python3.2 开始,configparser 库支持内置插值。这意味着可以在配置文件中使用预定义的变量来引用先前定义的值。
import configparser
config = configparser.ConfigParser()
config['settings'] = {'DEBUG': True}
config['path'] = {
'home_path': '/home/user',
'log_path': '%(home_path)s/logs',
}
print(config['path']['log_path'])
这里,我们在[path]段使用了%(home_path)s的形式表示引用了配置文件中[path]节点中的参数home_path,输出为/home/user/logs。
4.2 多行字符串
与其他Python代码一样,你也可以使用三重引号来定义多行字符串(multiline strings)。
import configparser
config = configparser.ConfigParser()
config['myapp'] = {
'db': """database_name
{
user: 'myuser'
password: 'mypassword'
server: 'database_server'
port: '1081'
}""",
}
print(config['myapp']['db'])
这里,我们在[myapp]段中使用db参数来存储多行字符串。
4.3 默认值
configparser 库提供了默认值选项。假设配置文件中缺少某个必需的参数,就可以使用默认值作为替代。
如果为 get() 方法的第三个参数指定一个默认值,那么如果该项在配置文件中不存在,就会使用它。
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
print(config.get('defaults', 'server_port', fallback="1234"))
这里我们在fallback参数中设置了默认值1234,如果读取server_port失败,就输出1234。
4.4 修改配置
configparser 库还提供了修改配置文件的相关方法,主要是相关节点、关键参数增删改查操作。
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
config['defaults']['server_port'] = "8000"
with open('config.ini', 'w') as configfile:
config.write(configfile)
print(config['defaults']['server_port'])
在这里,我们读取了本地的配置文件,并对[defaults]中的server_port参数进行修改,设置为8000。接着通过 open() 方法打开文件,使用 write() 方法将修改后的配置文件内容写入到文件中。
5. 总结
Python中configparser库的应用可以方便读取和写入ini格式的配置文件,对于开发中的一些常规参数配置十分适用,同时通过高级特性的使用,可以使用预定义的变量来引用先前定义的值,以及使用默认值替代一些必需参数等,达到快速配置文件的目的。