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

如何用Python向YAML文件添加part节点且不重复生成urls键?

解决Python向YAML文件添加子节点时重复生成顶级键的问题

问题说明

需要通过Python向现有YAML文件的urls节点下添加part-4及后续子节点,但当前代码每次执行都会在文件末尾新增一个独立的顶级urls键,导致YAML结构出现重复顶级节点,不符合需求。

当前Python代码:

d = {'urls':{f'part-{i}': {'updated': 16662709610, 'url': 'http://any-do0main1.com/', 'url-name': f'crl{i}.der'}}
with open('test.yaml', 'a+') as yaml_file:
    yaml.dump(d, yaml_file, default_flow_style=False)

现有YAML内容(已出现重复urls顶级键):

urls:
  part-0:
    updated: 1666270610
    url: http://any-domain1.com/
    url-name: cr0.der
  part-1:
    updated: 1666270610
    url: http://crl.domain/
    url-name: crl1.der
  part-2:
    updated: 1666270900
    url: http://crl.swisssign.net/
    url-name: crl2.der
urls:
  part-3:
    updated: 16662709610
    url: http://any-do0main1.com/
    url-name: cr3.der 

问题根源

当前代码使用**追加模式(a+)**写入新构造的{'urls': ...}字典,相当于在文件末尾直接追加一段新的YAML内容,而非修改已有的urls节点。

解决方案

正确流程:读取现有YAML内容→解析为Python字典→更新urls节点→重新写入覆盖原文件。

修正后的代码

import yaml

# 定义要添加的新节点数据(i可根据需求循环或动态赋值)
i = 4
new_part = {
    f'part-{i}': {
        'updated': 16662709610,
        'url': 'http://any-do0main1.com/',
        'url-name': f'crl{i}.der'
    }
}

try:
    # 读取现有YAML文件,文件为空时返回空字典
    with open('test.yaml', 'r') as yaml_file:
        data = yaml.safe_load(yaml_file) or {}
except FileNotFoundError:
    # 文件不存在时初始化空字典
    data = {}

# 确保urls节点存在,不存在则创建空字典
if 'urls' not in data:
    data['urls'] = {}

# 向urls节点添加新的part子节点
data['urls'].update(new_part)

# 将更新后的内容写入原文件(覆盖模式)
with open('test.yaml', 'w') as yaml_file:
    yaml.dump(data, yaml_file, default_flow_style=False)

效果验证

执行修正后的代码后,YAML文件将只有一个顶级urls键,新的part-4会被添加到该节点下:

urls:
  part-0:
    updated: 1666270610
    url: http://any-domain1.com/
    url-name: cr0.der
  part-1:
    updated: 1666270610
    url: http://crl.domain/
    url-name: crl1.der
  part-2:
    updated: 1666270900
    url: http://crl.swisssign.net/
    url-name: crl2.der
  part-3:
    updated: 16662709610
    url: http://any-do0main1.com/
    url-name: cr3.der
  part-4:
    updated: 16662709610
    url: http://any-do0main1.com/
    url-name: crl4.der

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:01:11