Python读写YAML配置文件应使用PyYAML库的safe_load和safe_dump方法确保安全,处理编码、异常、格式化及结构校验等关键细节。

Python 读写 YAML 配置文件,核心靠 PyYAML 库,它把 YAML 文本和 Python 数据结构(字典、列表、字符串、布尔值、None)双向转换。关键不是“能不能读”,而是“怎么安全、准确、可维护地读写”。
safe_load 解析配置别用 yaml.load() —— 它可能执行任意代码,有严重安全隐患。始终用 yaml.safe_load()。
示例(读取 config.yaml):
import yaml
<p>with open("config.yaml", "r", encoding="utf-8") as f:
config = yaml.safe_load(f)</p><p>print(config["database"]["host"]) # 如:localhost
print(config["features"]["enable_logging"]) # 如:True
safe_load 返回 None 或抛出 yaml.YAMLError,建议加异常处理safe_dump 生成可读配置写入时优先用 yaml.safe_dump(),避免序列化不可序列化的对象(如自定义类实例、函数),也更易读。
立即学习“Python免费学习笔记(深入)”;
常用参数提升可维护性:
default_flow_style=False:强制使用块格式(而非紧凑 JSON 风格)allow_unicode=True:保留中文等 Unicode 字符,不转义indent=2:设置缩进为 2 空格(默认也是 2,显式写明更清晰)config = {
"database": {
"host": "127.0.0.1",
"port": 5432,
"ssl": True
},
"features": {
"enable_cache": True,
"log_level": "INFO"
}
}
<p>with open("config.yaml", "w", encoding="utf-8") as f:
yaml.safe_dump(config, f, default_flow_style=False, allow_unicode=True, indent=2)
YAML 支持日期(2024-05-20)、null(对应 Python None)、锚点与引用(&id / *id)。PyYAML 默认支持前两者,锚点需启用 yaml.FullLoader(仅当真需要复用结构时才用,否则增加复杂度)。
datetime.date 或 datetime.datetime 对象null、~、Null 都解析为 None
!!python/object 等标签,说明用了非安全加载器,应立即改用 safe_load
真实项目中,光读写不够,常需验证字段是否存在、类型是否正确,或合并多个 YAML(如 base.yaml + dev.yaml)。
dict.get(key, default) 替代直接索引,防 KeyErrorassert isinstance(config.get("port"), int)
deepcopy + 递归更新,或借助 pydantic 做强类型校验(进阶推荐)以上就是PythonYAML配置文件怎么读写_pyyaml实战说明【指导】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号