免费在线网站建设南宁企业官网seo
目录
一、快速安装
二、模块简介
三、INI文件格式
四、基础用法
1 创建配置文件
2 读取配置文件
3 访问配置项
4 常用方法
五、高级功能
1 数据类型处理
2 默认值与回退
3 插值功能
4 自定义解析器
六、错误处理
七、最佳实践
八、完整示例
九、 注意事项
十、总结
🚀 个人主页:xmp65535
🚀 专栏:python技术专栏
configparser
是 Python 标准库中用于处理 INI 格式配置文件 的模块。它可以帮助你轻松读取、修改和生成配置文件,适用于保存程序设置、数据库连接信息等场景。
一、快速安装
configparser
是 Python 内置模块,无需额外安装,直接导入即可:
import configparser
二、模块简介
configparser
是Python标准库中用于处理INI格式配置文件的模块,支持:
-
多级配置节(Section)
-
类型自动转换
-
插值表达式
-
注释处理
-
配置项验证
import configparser
print(configparser.__version__) # 输出模块版本
三、INI文件格式
典型结构示例:
[DEFAULT]
server_ip = 127.0.0.1
port = 8080[database]
; MySQL配置
host = localhost
user = admin
password = secret
timeout = 5.5
ssl_enabled = true[logging]
level = INFO
handlers = console, file
四、基础用法
1 创建配置文件
config = configparser.ConfigParser()# 创建DEFAULT节(特殊节)
config['DEFAULT'] = {'debug': 'False','max_retries': '3'
}# 添加新节
config['database'] = {'host': 'localhost','port': '3306'
}# 单独添加配置项
config['webapp'] = {}
config['webapp']['thread_pool'] = '10'# 写入文件
with open('app_config.ini', 'w') as f:config.write(f)
生成文件内容:
[DEFAULT]
debug = False
max_retries = 3[database]
host = localhost
port = 3306[webapp]
thread_pool = 10
2 读取配置文件
config = configparser.ConfigParser()# 读取单个文件
config.read('app_config.ini')# 读取多个文件
found_files = config.read(['app_config.ini', 'override.ini'])
print("成功加载的文件:", found_files)# 安全加载(文件不存在不报错)
try:config.read('nonexistent.ini', encoding='utf-8')
except FileNotFoundError:print("文件不存在")
3 访问配置项
# 检查节是否存在
print('database' in config) # True# 获取所有节(排除DEFAULT)
sections = config.sections()
print(sections) # ['database', 'webapp']# 获取配置项
print(config['database']['host']) # localhost# 安全获取(带默认值)
timeout = config.get('database', 'timeout', fallback='10')
print(timeout) # 使用DEFAULT节的timeout或返回10# 获取所有键值对
for key in config['database']:print(f"{key} = {config['database'][key]}")
4 常用方法
方法 | 作用 | 示例 |
---|---|---|
sections() | 获取所有 Section 名称 | config.sections() |
options(section) | 获取某个 Section 的所有键名 | config.options('DATABASE') |
get(section, key) | 获取字符串类型的值 | config.get('DATABASE', 'host') |
getint(section, key) | 获取整型值(自动转换) | config.getint('DATABASE', 'port') |
getfloat(section, key) | 获取浮点型值 | config.getfloat(...) |
getboolean(section, key) | 获取布尔值(支持 yes/no , true/false ) | config.getboolean(...) |
add_section(section) | 添加新 Section | config.add_section('NEW_SECTION') |
remove_section(section) | 删除 Section | config.remove_section(...) |
set(section, key, value) | 修改或新增键值对 | config.set('DATABASE', 'host', '192.168.1.1') |
五、高级功能
1 数据类型处理
# 自动类型转换
config['DEFAULT']['max_retries'] = '3'
config['DEFAULT']['ratio'] = '0.85'
config['DEFAULT']['ssl_enabled'] = 'true'print(config.getint('DEFAULT', 'max_retries')) # 3
print(config.getfloat('DEFAULT', 'ratio')) # 0.85
print(config.getboolean('DEFAULT', 'ssl_enabled')) # True# 自定义转换器
def parse_size(value):units = {"KB": 1024, "MB": 1024**2, "GB": 1024**3}number, unit = value.split()return int(float(number) * units[unit])config['storage'] = {'max_size': '2.5 GB'}
size = parse_size(config['storage']['max_size'])
print(size) # 2684354560
2 默认值与回退
# 全局默认值
config = configparser.ConfigParser(defaults={'loglevel': 'WARNING','retries': '3'
})# 节内默认值
config['DEFAULT']['timeout'] = '30'# 多层回退
value = config.get('api', 'timeout', fallback=config['DEFAULT']['timeout'])
3 插值功能
config = configparser.ConfigParser(interpolation=configparser.ExtendedInterpolation())config['DEFAULT'] = {'home_dir': '/var/app','data_dir': '%(home_dir)s/data'
}config['paths'] = {'log_dir': '${home_dir}/logs','temp_dir': '${paths:log_dir}/temp'
}print(config['paths']['temp_dir']) # /var/app/logs/temp
4 自定义解析器
class MyConfigParser(configparser.ConfigParser):def optionxform(self, optionstr):"""保持键的大小写敏感"""return optionstrdef _validate(self, section, option, value):"""自定义验证逻辑"""if option == 'port' and not (0 < int(value) <= 65535):raise ValueError("Invalid port number")super()._validate(section, option, value)custom_parser = MyConfigParser()
六、错误处理
try:print(config['nonexistent_section']['option'])
except configparser.NoSectionError:print("配置节不存在!")try:value = config.get('database', 'invalid_option')
except configparser.NoOptionError:print("配置项不存在!")# 安全访问方法
value = config.get('database', 'invalid_option', fallback='default_value')
七、最佳实践
-
配置组织规范:
# ini文件[production] ; 继承DEFAULT并覆盖 database.host = db.prod.example.com[staging:production] ; 继承production配置 database.host = db.stage.example.com
-
敏感信息处理:
# 从环境变量读取密码 import os config['database']['password'] = os.getenv('DB_PASSWORD')
-
配置版本控制:
# ini[metadata] config_version = 1.2
八、完整示例
import configparser# 初始化配置
config = configparser.ConfigParser(interpolation=configparser.ExtendedInterpolation())# 创建默认配置
defaults = {'threads': '4','log_level': 'INFO'
}
config.read_dict({'DEFAULT': defaults})# 读取多个配置文件
config.read(['base_config.ini', 'override.ini'])# 访问配置
try:db_config = {'host': config['database']['host'],'port': config.getint('database', 'port'),'user': config['database']['user'],'password': config['database']['password']}
except configparser.Error as e:print(f"配置错误: {e}")exit(1)# 动态更新配置
if config.getboolean('debug', 'enabled'):config['DEFAULT']['log_level'] = 'DEBUG'# 保存用户自定义配置
user_config = configparser.ConfigParser()
user_config['user_prefs'] = {'theme': 'dark','notifications': 'yes'
}
with open('user.ini', 'w') as f:user_config.write(f)
九、 注意事项
-
文件路径问题:
确保配置文件路径正确(建议使用绝对路径或检查当前工作目录)。 -
键值不存在时的处理:
使用get()
方法时,如果键不存在会抛出NoOptionError
。可以通过以下方式避免:# 提供默认值 timeout = config.get('DATABASE', 'timeout', fallback=30)
-
大小写敏感:
默认情况下键名是 不区分大小写 的(全部转为小写)。如需保留大小写,初始化时设置:config = configparser.ConfigParser(allow_no_value=True, strict=True)
-
注释和空行:
INI 文件支持以#
或;
开头的注释,空行会被自动忽略。
十、总结
-
适用场景:中小型项目的配置管理,需要人类可读的简单配置文件。
-
替代方案:复杂场景可考虑 JSON/YAML 格式(使用
json
或pyyaml
模块)。 -
优势:简单易用,无需第三方依赖,兼容 INI 标准格式。
通过 configparser
,你可以轻松实现配置与代码分离,让程序更灵活、更易维护!