Python ConfigParser模块详解:配置文件读取与操作指南
本文详细介绍Python标准库ConfigParser模块的使用方法,涵盖配置文件格式规范、基础读取操作、类型转换获取、增删改查功能及保存机制。通过实例演示如何高效管理项目中的IP、端口等动态参数,实现配置与代码分离,提升开发维护效率。
ConfigParser模块简介与导入
在软件开发过程中,经常需要配置各种IP地址、端口号等参数。如果将这些信息硬编码在源代码中,每次修改都需要重启项目并重新加载配置,操作繁琐且容易出错。因此,最佳实践是将可变参数提取到独立的配置文件或数据库中,只需修改配置文件即可生效,无需改动代码。Python标准库提供了ConfigParser模块(Python 3中为configparser),用于读取和操作配置文件。在程序开头导入该模块时,需注意Python 2与Python 3之间的命名差异,Python 3对模块名进行了规范化调整。
import ConfigParser #python 2.x import configparser #python 3.x
配置文件格式规范
配置文件的格式规范
- 配置文件由一个或多个section(节)组成,每个section包含若干option(选项);
- section通过[sect_name]的形式标识,每个option表现为键值对,使用分隔符=或:进行分隔;
- option分隔符两侧的空格会被自动忽略;
- 配置文件使用#和;符号进行注释。
一个简单的配置文件样例 config.conf
# database source
[db] # 对应的是一个section
host = 127.0.0.1 # 对应的是一个option键值对形式
port = 3306
user = root
pass = root
# ssh
[ssh]
host = 192.168.10.111
user = sean
pass = sean
ConfigParser基本操作与示例
ConfigParser的基本操作流程
首先实例化ConfigParser对象并加载配置文件。
cp = ConfigParser.SafeConfigParser() cp.read('config.conf')
获取section列表、option键列表以及option键值元组列表。
print('all sections:', cp.sections()) # sections: ['db', 'ssh'] print('options of [db]:', cp.options('db')) # options of [db]: ['host', 'port', 'user', 'pass'] print('items of [ssh]:', cp.items('ssh')) # items of [ssh]: [('host', '192.168.10.111'), ('user', 'sean'), ('pass', 'sean')]
读取指定的配置信息。
print('host of db:', cp.get('db', 'host')) # host of db: 127.0.0.1 print('host of ssh:', cp.get('ssh', 'host')) # host of ssh: 192.168.10.111
按类型读取配置信息:使用getint、getfloat和getboolean方法分别获取整数、浮点数和布尔值。
print(type(cp.getint('db', 'port'))) # <type 'int'>
判断option是否存在。
print(cp.has_option('db', 'host')) # True
设置option的值。
cp.set('db', 'host','192.168.10.222')
删除指定的option。
cp.remove_option('db', 'host')
判断section是否存在。
print(cp.has_section('db')) # True
添加新的section。
cp.add_section('new_sect')
删除指定的section。
cp.remove_section('db')
保存配置:set、remove_option、add_section和remove_section等方法仅修改ConfigParser对象内部状态,不会直接写入文件。需调用write方法将配置内容输出到文件中。
cp.write(open('config.conf', 'w')) cp.write(sys.stdout)
以上介绍了Python ConfigParser模块的核心功能,希望能为您的项目开发提供便利。欢迎持续关注本站获取更多技术分享。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













