原文链接: http://www.juzicode.com/python-module-configobj/
ConfigObj是Python的配置文件管理库,支持INI格式文件读写、嵌套数据结构、类型验证等功能,比标准ConfigParser更强大,适用于复杂配置管理场景。
应用场景
- 应用配置文件的读写管理
- 嵌套配置数据结构处理
- 配置项类型验证与转换
- 多环境配置合并
- 配置版本迁移
- 注释保留与维护
安装与导入
# juzicode.com/VX公众号:juzicode
pip install configobj
from configobj import ConfigObj
使用方法
创建新配置文件
初始化配置对象并写入磁盘,自动创建不存在的目录。
# juzicode.com/VX公众号:juzicode
from configobj import ConfigObj
config = ConfigObj()
config['database'] = {'host': 'localhost', 'port': 5432}
config['debug'] = True
config.filename = 'app.conf'
config.write()
运行结果:
# app.conf内容
debug = True
[database]
host = localhost
port = 5432
读取现有配置
加载配置文件并访问配置项,支持自动类型转换。
# juzicode.com/VX公众号:juzicode
config = ConfigObj('app.conf')
print("数据库端口:", config['database']['port'])
运行结果:
数据库端口: 5432
嵌套配置结构
处理多级嵌套的复杂配置结构。
# juzicode.com/VX公众号:juzicode
config['logging'] = {}
config['logging']['file'] = {'path': '/var/log', 'max_size': '10MB'}
print(config['logging']['file']['max_size'])
运行结果:
10MB
配置项更新
动态修改配置参数并保存。
# juzicode.com/VX公众号:juzicode
config['database']['host'] = '192.168.1.100'
config.write()
运行结果:
配置文件中的host值更新为新IP地址
列表类型处理
存储和读取列表类型的配置项。
# juzicode.com/VX公众号:juzicode
config['whitelist'] = ['192.168.1.1', '10.0.0.1']
print("IP数量:", len(config['whitelist']))
运行结果:
IP数量: 2
配置验证
定义配置规范并验证数据有效性。
# juzicode.com/VX公众号:juzicode
from validate import Validator
spec = {
'database': {
'host': 'string',
'port': 'integer(0,65535)'
}
}
config = ConfigObj('app.conf', configspec=spec)
result = config.validate(Validator())
print("配置有效" if result else "配置错误")
运行结果:
配置有效
加密配置存储
结合加密库实现敏感信息保护。
# juzicode.com/VX公众号:juzicode
from cryptography.fernet import Fernet
cipher = Fernet(Fernet.generate_key())
config['db_password'] = cipher.encrypt(b'secret').decode()
config.write()
运行结果:
配置文件中密码字段被加密存储
总结
ConfigObj为配置管理提供专业解决方案:
- 支持嵌套数据结构和类型转换
- 提供强大的配置验证机制
- 保留配置文件原始格式与注释
- 兼容INI文件标准
注意事项:
- 复杂嵌套结构需合理设计
- 写入前做好配置备份
- 加密配置需妥善管理密钥