应根据实际需求选择:ini适合分节、带注释的简单配置(如数据库连接),用configparser读取;json适合嵌套复杂、跨语言共享的配置(如API参数),用json模块加载。

Python 读取配置文件,ini 和 json 是最常用的两种格式。选哪种不取决于“哪个更好”,而要看实际需求:ini 更适合分节、带注释的简单配置(比如数据库连接、日志级别);json 更适合结构复杂、嵌套深、需要跨语言共享的配置(比如 API 参数、前端传来的规则)。
用 configparser 读取 ini 文件
Python 标准库自带 configparser,专为 ini 设计,语法简洁,支持节(section)、键值对和注释(以 ; 或 # 开头)。
- ini 文件示例(config.ini):
[database] host = localhost port = 5432 user = admin password = secret[log] level = INFO file = app.log
- Python 加载方式:
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 模块加载 json 配置
json 更灵活,天然支持列表、嵌套字典、布尔值和 null,但不支持注释(写注释会解析失败),也不区分大小写(key 区分大小写)。
立即学习“Python免费学习笔记(深入)”;
- json 文件示例(config.json):
{
"database": {
"host": "localhost",
"port": 5432,
"auth": {
"user": "admin",
"password": "secret"
}
},
"features": ["cache", "metrics"],
"debug": true
}- Python 加载方式:
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)
ini 和 json 怎么选?看这三点
- 谁在维护配置? 运维或非程序员改配置 → 选 ini(有注释、分节清晰、不易写错)
- 配置结构是否嵌套? 多层字典或含列表 → 选 json(ini 无法原生表达数组,强行模拟易出错)
- 是否要和其他语言共用? Go/JS/Java 都要读 → 选 json(标准统一,解析器成熟)
进阶建议:混合使用 + 环境隔离
大项目常把通用配置放 json,敏感或环境相关项抽出来用 ini 或环境变量控制。例如:
- 主配置
base.json定义接口路径、超时时间 - 环境配置
dev.ini/prod.ini只存 host、密码等差异项 - 代码中先加载 base.json,再用 configparser 覆盖对应字段
不复杂但容易忽略。










