在写 Python 项目的时候,你是不是也遇到过这样的场景:需要存储一些环境相关的配置信息,比如数据库账号、API 密钥、功能开关、应用参数……很多开发者第一反应就是去用 JSON、YAML,或者直接在代码里写死。
但其实,Python 早在 3.0 版本就自带了一个非常轻量却实用的配置解析工具——configparser。
它几乎被忽视,很多人不知道它的存在,或者觉得它不符合现代编程,不够高大上。可真相是对于大部分中小型项目,它可能是最简单、最高效、零依赖的解决方案。
配置文件解析的“老兵”,依旧好用
configparser 支持的配置文件是最经典的 INI 格式,人类可读性强,几十年来一直在各种应用中被使用。文件结构由节(section)、键(key)、值(value) 组成,看起来像这样:
[database]
host = localhost
port = 5432
user = admin
password = secret
[app]
debug = true
log_level = INFO
使用 configparser,你几乎不需要写任何解析逻辑,几行代码就能直接读到配置:
import configparser
config = configparser.ConfigParser()
config.read("settings.ini")
db_host = config["database"]["host"]
debug_mode = config.getboolean("app", "debug")
print(db_host) # localhost
print(debug_mode) # True
它的用法非常直观:每个节像字典一样访问,所有值默认读出来都是字符串,还提供了 getboolean()
、getint()
、getfloat()
等方法,帮你自动转换数据类型。
不只是读取,写入和高级功能也很强大
configparser 不光能读配置,还能直接创建或更新配置文件:
config = configparser.ConfigParser()
config["database"] = {
"host": "localhost",
"port": "5554",
"user": "admin",
"password": "admin"
}
config["app"] = {
"debug": "true",
"log_level": "INFO"
}
with open("settings.ini", "w") as f:
config.write(f)
除此之外,它还提供了一些常被忽视的功能:
默认值继承:可以为所有节设置全局默认值,缺失的配置会自动回退到默认值。
变量插值:支持变量引用,避免重复定义,比如路径配置可以自动拼接:
[paths]
root = /usr/local/app
logs = %(root)s/logs
多文件合并:加载多个配置文件,后面的会覆盖前面的配置,非常适合分环境管理。
大小写敏感和回退值:可以设置区分大小写,也能给缺失的键提供默认返回值,避免报错。
这些功能组合起来,足以应对绝大多数日常开发场景。
和 JSON、YAML、TOML 的比较
当然,configparser 不是万能的。它适合简单、平铺直叙的配置,但如果你要存储复杂的层级结构,YAML 或 TOML 可能更合适。
JSON:结构化强,但不支持注释,可读性一般。
YAML:功能强大,DevOps 场景常用,但缩进容易出错。
TOML:语法简洁,已被 Python 官方用于 pyproject.toml
。
INI(configparser):轻量、可读性好、零依赖,适合中小型项目和简单配置需求。
所以选哪个,取决于你的项目复杂度。
真实应用场景
想象一下,你写了一个命令行工具,需要让用户配置服务器地址和账号。用 JSON 或 YAML 太麻烦,直接在 Python 里写死更不可取。一个简单的 INI 文件,配合 configparser,就能优雅解决问题。
它特别适合:
- 中小型应用的环境配置
- 命令行工具或脚本
- 快速原型开发
- 还在使用 INI 习惯的老系统
而且它不依赖任何第三方库,也不存在版本兼容问题。只要你装了 Python,它就已经在那里随时可用。
最简单的往往是最好的
configparser 不会替代 YAML 或 TOML,但它在很多场景下能帮你省下大量时间和心力。下次写 Python 项目,需要一个配置文件的时候,不妨先想想它。也许你会发现,最强大的工具,其实一直在你手边。