当前位置:首页>python>Python 轻松读写 YAML:配置文件管理就该这么简单!

Python 轻松读写 YAML:配置文件管理就该这么简单!

  • 2026-09-10 11:31:21
Python 轻松读写 YAML:配置文件管理就该这么简单!
大家在做项目时,是不是经常要处理配置文件?数据库地址、接口参数、环境开关……用 JSON 太臃肿、手写 INI 太麻烦,YAML 才是现代项目配置的「最佳搭档」。
今天就用 PyYAML 库,手把手教你在 Python 里安全、规范、优雅地读写 YAML,新手也能直接复制用!
一、先搞懂:YAML 到底好在哪?
YAML:YAML Ain’t Markup Language,是一种人类友好、极简易读的数据序列化格式,专门用来写配置。
对比一下就知道:
  • 支持注释
  • 靠缩进表示层级
  • 天然支持列表、字典、嵌套结构
  • 几乎所有语言、框架、运维工具都支持
项目配置、K8s 清单、CI/CD 变量……全都离不开它。
二、第一步:安装 PyYAML
Python 操作 YAML 最常用、最稳定的库就是 PyYAML。
打开终端,一行命令安装:
pip install pyyaml
安装完成,直接开干!
三、实战 1:安全读取 YAML 文件
读取配置最关键的是:安全 + 健壮,千万别用有风险的写法。
✅ 推荐写法(安全加载)
import yamldef load_yaml(file_path: str) -> dict:    with open(file_path, 'r', encoding='utf-8') as f:        return yaml.safe_load(f)if __name__ == '__main__':    switch_config = load_yaml('huawei_switch.yaml')    # 打印交换机基本信息    print("华为交换机基本信息:")    print(f"设备型号:{switch_config['switch_info']['model']}")    print(f"设备IP:{switch_config['switch_info']['ip_address']}")    print(f"管理端口:{switch_config['switch_info']['mgmt_port']}")
⚠️ 必看安全提醒
  • 永远用 yaml.safe_load():只解析基础数据类型,禁止执行恶意代码
  • 普通 yaml.load() 有高危漏洞,会执行文件里的 Python 对象
  • 加上 encoding='utf-8',避免中文、注释乱码
四、实战 2:优雅写入 YAML 文件
把 Python 字典存回 YAML 同样简单,还能控制格式更美观。
✅ 标准写入代码
import yamldef write_yaml(data: dict, file_path: str):    with open(file_path, 'w', encoding='utf-8') as f:        yaml.dump(            data,            f,            default_flow_style=False,              allow_unicode=True,                    indent=2                           )# 华为交换机配置数据switch_data = {    "switch_info": {        "model": "Huawei S5720-52X-PWR-LI-AC",        "ip_address": "192.168.1.2",        "mgmt_port": "GigabitEthernet0/0/1",        "username": "admin",        "password": "Huawei@456"      },    "global_config": {        "hostname": "Huawei-S5720-ServerRoom",        "vlan": [            {                "vlan_id": 30,                "name": "Monitor-Network",                "gateway": "192.168.30.1",                "subnet_mask": "255.255.255.0"            },            {                "vlan_id": 40,                "name": "IoT-Network",                "gateway": "192.168.40.1",                "subnet_mask": "255.255.255.0"            }        ]    },    "port_config": {        "GigabitEthernet0/0/2": {            "vlan": 30,            "mode": "access",            "description": "Monitor-Camera-01"        },        "GigabitEthernet0/0/3": {            "vlan": 40,            "mode": "access",            "description": "IoT-Device-01"        }    }}# 执行写入,生成华为交换机配置文件write_yaml(switch_data, 'new_huawei_switch.yaml')
运行后,打开 new_huawei_switch.yaml,格式非常工整:
switch_info:  model: Huawei S5720-52X-PWR-LI-AC  ip_address: 192.168.1.2  mgmt_port: GigabitEthernet0/0/1  username: admin  password: Huawei@456global_config:  hostname: Huawei-S5720-ServerRoom  vlan:  - vlan_id: 30    name: Monitor-Network    gateway: 192.168.30.1    subnet_mask: 255.255.255.0  - vlan_id: 40    name: IoT-Network    gateway: 192.168.40.1    subnet_mask: 255.255.255.0port_config:  GigabitEthernet0/0/2:    vlan: 30    mode: access    description: Monitor-Camera-01  GigabitEthernet0/0/3:    vlan: 40    mode: access    description: IoT-Device-01
五、项目必看:YAML 最佳实践
想让配置文件稳定、好维护、不出坑,记住这 4 条:
1.格式规范不能乱
  • 缩进只用空格
  • 键值对:key:value,冒号后必须加空格
  • 列表用 - 元素 表示,层级清晰
  • 注释用#,只做说明,不写业务逻辑
2.安全永远第一
  • 外部上传、不可信来源的 YAML:只允许 safe_load
  • 不使用 !!python/object 等可执行标签
  • 敏感配置不使用明文
3.读写更健壮
  • 加上try-except捕获文件不存在、语法错误
  • 统一编码utf-8,避免跨平台乱码
  • 大配置拆分成多个文件,不要一个文件写到几千行
4. 格式更美观
  • default_flow_style=False:强制分行
  • allow_unicode=True:中文正常显示
  • indent=2:统一缩进
六、总结
用 Python + PyYAML 管理配置,真的又快又稳:
  • 安装:pip install pyyaml
  • 读取:yaml.safe_load()(安全第一)
  • 写入:yaml.dump() + 格式参数(优雅清晰)
  • 遵守规范:缩进、安全、编码、拆分
以后项目配置别再硬编码、别再用难读的 JSON 了,YAML + PyYAML 一套带走,干净又专业!

最新文章

随机文章