应根据实际需求选择:ini适合分节、带注释的简单配置(如数据库连接),用configparser读取;json适合嵌套复杂、跨语言共享的配置(如API参数),用json模块加载。
Python 读取配置文件,ini 和 json 是最常用的两种格式。选哪种不取决于“哪个更好”,而要看实际需求:ini 更适合分节、带注释的简单配置(比如数据库连接、日志级别);json 更适合结构复杂、嵌套深、需要跨语言共享的配置(比如 API 参数、前端传来的规则)。
Python 标准库自带 configparser,专为 ini 设计,语法简洁,支持节(section)、键值对和注释(以 ; 或 # 开头)。
[database] host = localhost port = 5432 user = admin password = secret[log] level = INFO file = app.log
from configparser import ConfigParser
config = ConfigParser()
config.read("config.ini")
host = config.get("database", "host") # 返回字符串
port = config.getint("database", "port") # 自动转 int
log_level = config.get("log", "level")
get() 总是返回字符串,如需其他类型,用 getint()、getboolean()、getfloat();read() 不报错即使文件不存在,建议加判断:if not config.read("config.ini"): raise
FileNotFoundError("配置文件未找到")
json 更灵活,天然支持列表、嵌套字典、布尔值和 null,但不支持注释(写注释会解析失败),也不区分大小写(key 区分大小写)。
立即学习“Python免费学习笔记(深入)”;
{
"database": {
"host": "localhost",
"port": 5432,
"auth": {
"user": "admin",
"password": "secret"
}
},
"features": ["cache", "metrics"],
"debug": true
}import json
with open("config.json", encoding="utf-8") as f:
config = json.load(f)
host = config["database"]["host"]
features = config["features"] # 直接是 list
debug_mode = config["debug"] # 自动是 bool
open(..., encoding="utf-8");文件不存在?用 try/except json.JSONDecodeError 或 FileNotFoundError 捕获;想从字符串加载?用 json.loads(string)
大项目常把通用配置放 json,敏感或环境相关项抽出来用 ini 或环境变量控制。例如:
base.json 定义接口路径、超时时间dev.ini / prod.ini 只存 host、密码等差异项不复杂但容易忽略。