使用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
相关产品推荐
相关产品推荐

