Python中创建和修改YAML文件的完整方法

青禾
青禾
发布时间:2026-10-11| 2人浏览过
原创

本文详细介绍在 Python 中创建和修改 YAML 配置文件的核心方法。通过 pyyaml 可快速序列化字典生成基础结构;若需原位微调并保留原始注释与缩进,推荐使用 ruamel.yaml。文中附带完整代码、环境安装步骤及读写前后对比效果,助您高效管理项目参数。

Python 创建与修改 YAML 文件的完整指南

准备条件与环境配置

YAML(Yet Another Markup Language)是一种简洁直观的数据序列化格式,广泛应用于项目配置、参数传递及自动化脚本。在 Python 生态中,处理 YAML 文件主要依赖第三方库。根据是否需要保留原文件格式与注释,可选择不同的工具链:

  • 若仅需快速生成基础结构或使用方,可使用 pyyaml。
  • 若需对现有配置文件进行原地微调,且不希望丢失原有注释、排序与缩进格式,强烈推荐使用 ruamel.yaml。

第1步:安装必要的 Python 扩展库

在终端或虚拟环境中执行以下命令安装所需包:

pip install pyyaml ruamel.yaml

第2步:使用 PyYAML 快速创建 YAML 文件

当需要从零构建一个配置文件时,可将 Python 字典对象直接序列化为 YAML 格式。该方法会覆盖目标路径,因此建议提前确认文件是否存在。

import os
import yaml

# 定义目标数据结构
desired_caps = {
    'train': 'dataTrain/2007_train.txt',
    'val': 'dataTrain/2007_val.txt',
    'nc': 2,
    'names': ['a', 'b']
}

# 获取当前脚本目录并拼接目标路径
curpath = os.path.dirname(os.path.realpath(__file__))
yamlpath = os.path.join(curpath, './yamlFile/caps.yaml')

# 确保上级目录存在并写入文件
os.makedirs(os.path.dirname(yamlpath), exist_ok=True)
with open(yamlpath, 'w', encoding='utf-8') as f:
    yaml.dump(desired_caps, f, allow_unicode=True)

第3步:使用 PyYAML 简单覆写现有文件数据

通过 yaml.safe_load 读取后直接修改字典键值,再使用 yaml.safe_dump 写回。注意此方式会重新格式化文件,导致原始注释和部分排版丢失。

import os
import yaml

def set_state(state):
    file_name = './yamlFile/bottlemldel.yaml'
    # 安全读取
    with open(file_name, 'r', encoding='utf-8') as f:
        doc = yaml.safe_load(f)
    
    # 修改指定字段
    doc['nc'] = state
    
    # 覆盖保存,default_flow_style=False 保持块状缩进
    with open(file_name, 'w', encoding='utf-8') as f:
        yaml.safe_dump(doc, f, default_flow_style=False)

# 调用更新参数
set_state(8)

第4步:使用 ruamel.yaml 精准保留格式修改配置

在处理 GitLab CI、Conda 环境等包含丰富注释的结构化文件时,ruamel.yaml 是更优选择。它能精确解析节点位置,实现增量更新而不破坏原有样式。

以清理 environment.yaml 中 dependencies 列表下的版本后缀为例(删除最后一个等号及之后的内容):

from ruamel.yaml import YAML

yaml_handler = YAML()
yaml_handler.preserve_quotes = True  # 保留引号风格
yaml_handler.width = 400             # 控制长行换行宽度

# 读取文件
with open('environment.yaml', 'r', encoding='utf-8') as file:
    data = yaml_handler.load(file)

# 遍历并修改目标列表项
dep_list = data['dependencies']
for index in range(len(dep_list)):
    cur_item = dep_list[index]
    if isinstance(cur_item, str) and '=' in cur_item:
        # 仅分割一次,剔除右侧版本号
        cleaned_str = cur_item.rsplit('=', 1)[0]
        dep_list[index] = cleaned_str

# 覆盖保存至原文件
with open('environment.yaml', 'w', encoding='utf-8') as file:
    yaml_handler.dump(data, file)

以下为执行上述逻辑前后的文件形态对比,可见注释结构与缩进均被完整保留:

修改前 environment.yaml 文件中 dependencies 列表包含完整带等号的依赖项
修改前:原始配置文件包含带版本号的依赖字符串
修改后 environment.yaml 文件中 dependencies 列表已清理等号及后续内容
修改后:依赖项已精准截断尾部参数,整体布局未变

操作注意事项与排错提示

  • 备份优先:直接覆写(w模式)会清空原文件内容。批量处理前务必复制一份原始 .yaml 作为快照,避免不可逆的数据丢失。

  • 编码统一:跨平台读写时显式声明 encoding='utf-8' 可防止 Windows 环境下出现乱码或 UnicodeDecodeError。

  • 结构匹配:如果 data['dependencies'] 返回类型非列表(例如嵌套字典),需先打印 type() 确认层级关系,避免触发 IndexError 或 TypeError。

总结

日常脚本初始化或底层数据存储推荐直接使用 pyyaml,其 API 简洁且内存占用低;面对生产环境的 CI/CD 配置、模型训练参数集等高频迭代文档,采用 ruamel.yaml 进行节点级编辑能大幅降低人工校对成本。掌握两种工具的适用边界,即可灵活应对各类 Python 配置文件管理需求。

以上就是 Python 创建和修改 YAML 文件的详细内容,更多关于 Python 配置文件管理与 ruamel.yaml 使用技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。