You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用yaml.dump写入现有YAML文件时原内容被覆盖如何解决

YAML写入时保留原有内容的解决方案

根因说明

  • 你当前打开文件使用的是w写入模式,该模式默认会清空文件原有内容,所以写入后只会剩下新生成的内容
  • 即使改用a追加模式直接调用yaml.dump写入新内容,也会自动生成YAML多文档分隔符---,最终得到多文档结构的YAML,无法实现你要的同层级追加键值对的效果

正确实现逻辑

正确的操作流程是「先读取原有内容→合并新旧数据→全量写回文件」,既能保证原有内容不丢失,也能保证YAML格式完全合法,代码示例如下:

import yaml
import pandas as pd

# 替换为你的目标YAML文件路径
yaml_file_path = "./target.yaml"

# 1. 读取原有YAML内容
with open(yaml_file_path, 'r', encoding='utf-8') as f:
    # safe_load更安全,文件为空时默认初始化为空字典
    existing_yaml_data = yaml.safe_load(f) or {}

# 2. 处理CSV生成的新数据,合并到原有数据中
new_csv_data = df.loc[(df['NAME'] == pack)].to_dict(orient='records')
# 按你的需求指定新增内容的顶层键名
existing_yaml_data['NewYamlFromCsvFile'] = new_csv_data

# 3. 合并后的完整数据重新写入文件
with open(yaml_file_path, 'w', encoding='utf-8') as outfile:
    yaml.dump(
        existing_yaml_data,
        outfile,
        sort_keys=False,
        width=72, 
        indent=4,
        allow_unicode=True # 存在中文内容时需要加该参数避免乱码
    )

额外说明

如果你的原有YAML是多文档结构,可以用yaml.safe_load_all读取所有文档,对应调整合并逻辑即可。

内容的提问来源于stack exchange,提问作者gospecomid12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:42:00