page contents

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

今天就用 PyYAML 库,手把手教你在 Python 里安全、规范、优雅地读写 YAML,新手也能直接复制用!

attachments-2026-04-ul90JPlW69dc4af70bc64.png大家在做项目时,是不是经常要处理配置文件?数据库地址、接口参数、环境开关……用 JSON 太臃肿、手写 INI 太麻烦,YAML 才是现代项目配置的「最佳搭档」。

今天就用 PyYAML 库,手把手教你在 Python 里安全、规范、优雅地读写 YAML,新手也能直接复制用!一、先搞懂:YAML 到底好在哪?YAML:YAML Ain’t Markup Language,是一种人类友好、极简易读的数据序列化格式,专门用来写配置。对比一下就知道:

  • 支持注释
  • 靠缩进表示层级
  • 天然支持列表、字典、嵌套结构
  • 几乎所有语言、框架、运维工具都支持

项目配置、K8s 清单、CI/CD 变量……全都离不开它。二、第一步:安装 PyYAMLPython 操作 YAML 最常用、最稳定的库就是 PyYAML打开终端,一行命令安装:

pip install pyyaml

安装完成,直接开干!三、实战 1:安全读取 YAML 文件读取配置最关键的是:安全 + 健壮,千万别用有风险的写法。推荐写法(安全加载)

import yaml
def 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 yaml
def 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 一套带走,干净又专业

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1943 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 1943 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章