Python中如何向YAML文件添加新键值对而不覆盖原有内容?
YAML更新时键值对被覆盖的原因及解决方法
为什么第一次赋值会被覆盖
你两次都是直接给data['WIN']['Machine']赋值全新的dict()对象:
- 第一次赋值后,
Machine是包含node_labels的字典 - 第二次赋值直接把
Machine替换成了只包含vs的新字典,原有的键值对自然被覆盖。
如何添加多个键值对
有几种可靠的方式实现需求:
方式1:一次性构造完整字典赋值
直接创建包含所有键值对的字典,一次性赋值给Machine:
data = yaml.safe_load(file) # 推荐用safe_load替代load,避免安全风险 data['WIN']['Machine'] = { 'node_labels': '+> tfs vs2022', 'vs': 'vs2022' } yaml.dump(data, file)
方式2:逐个添加键值对(适合增量更新)
先确保Machine字典存在,再逐个添加键值对,不会覆盖原有内容:
data = yaml.safe_load(file) # 确保WIN下的Machine存在,不存在则初始化空字典 if 'Machine' not in data['WIN']: data['WIN']['Machine'] = {} # 逐个添加键值对 data['WIN']['Machine']['node_labels'] = '+> tfs vs2022' data['WIN']['Machine']['vs'] = 'vs2022' yaml.dump(data, file)
方式3:先获取字典对象再批量更新
如果Machine已存在,也可以先拿到它的引用,再批量更新(不会覆盖原有其他键值对):
data = yaml.safe_load(file) machine_dict = data['WIN']['Machine'] machine_dict.update({ 'node_labels': '+> tfs vs2022', 'vs': 'vs2022' }) yaml.dump(data, file)
内容的提问来源于stack exchange,提问作者endianness
相关产品推荐
相关产品推荐

