python加载.ini和.yaml配置文件应分别使用标准库configparser和第三方库pyyaml;注意路径处理、编码指定、数据类型转换及安全解析,推荐结合环境变量与封装类实现灵活配置管理。

Python中加载配置文件,常用的是 .ini 和 .yaml 两种格式,它们结构清晰、易读易写,适合管理不同环境的参数。关键在于选对标准库或第三方库,并注意路径、编码和数据类型转换等细节。
加载 .ini 配置文件(用 configparser)
configparser 是 Python 标准库,无需安装,专为 INI 格式设计。它把配置按“节(section)”组织,每个节下是键值对。
示例 config.ini:
host = localhost
port = 5432
debug = true
[app]
name = myapp
version = 1.2.0
加载方式:
立即学习“Python免费学习笔记(深入)”;
- 使用
ConfigParser()实例,调用read()方法传入文件路径(支持列表,可读多个) - 注意:默认不区分大小写(key 和 section 名忽略大小写),如需严格区分,可传入
interpolation=None并设置converters - 获取值时用
get(section, key);布尔值建议用getboolean(),数字用getint()或getfloat(),避免手动转换出错 - 确保文件路径正确,推荐用
pathlib.Path(__file__).parent / "config.ini"构造绝对路径,防止运行目录影响
加载 .yaml 配置文件(用 PyYAML)
PyYAML 不是标准库,需先安装:pip install pyyaml。它支持 YAML 1.1/1.2,能解析复杂嵌套结构、列表、锚点等。
示例 config.yaml:
host: localhost
port: 5432
debug: true
app:
name: myapp
version: "1.2.0"
加载方式:
立即学习“Python免费学习笔记(深入)”;
- 用
yaml.safe_load()(强烈推荐),不执行任意代码,安全可靠;避免用yaml.load()(已弃用且有风险) - 打开文件时显式指定
encoding='utf-8',尤其在 Windows 下避免乱码 - YAML 中的
true/false、数字、null 会自动转为对应 Python 类型;字符串若含特殊字符或想强制为 str,可用引号包裹 - 如需合并多个 YAML 文件(比如 base + dev),可分别加载后用字典递归更新,或借助
pyaml等工具
统一配置管理的小技巧
实际项目中常需根据环境(dev/test/prod)切换配置。可以结合两者优势:
- 用 INI 管理简单扁平配置(如日志级别、开关项),用 YAML 管理嵌套结构(如数据库连接池、API 路由)
- 封装一个配置加载器类,初始化时根据
ENV=dev环境变量自动选择config.dev.yaml或config.prod.ini - 配置值应尽量避免硬编码路径或密码,敏感字段可用环境变量覆盖,例如
os.getenv("DB_PASSWORD", config.get("database", "password")) - 加一层缓存或单例,避免重复解析同一文件;也可用
@lru_cache缓存解析结果
常见问题与避坑提醒
两类格式都容易踩坑,提前注意可省去大量调试时间:
-
configparser默认把值全当字符串,port = 5432读出来是字符串"5432",务必用getint()显式转换 - YAML 中缩进必须用空格,不能用 Tab;相邻层级缩进数要一致,否则报
ParserError - Windows 下路径反斜杠
在 YAML 字符串里可能被误解析为转义符,建议统一用正斜杠/或双反斜杠\ - 修改配置文件后未重启服务?记得确认程序是否做了热重载,否则仍用旧值——多数框架需手动触发或依赖 watchdog










