应根据实际需求选择: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 覆盖对应字段
不复杂但容易忽略。