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

使用Python与ruamel.yaml编辑YAML文件时的CPU/内存修改问题

你的代码问题分析与修复方案

老兄,你这代码的问题完全是访问YAML嵌套层级的路径错了,还做了不少没必要的错误操作,才导致出现新增cpu字段却没修改目标值的情况。

先给你拆解下问题出在哪:

  • 你想修改的是spec.hard下面的cpu和memory,但你直接把elem['spec']设为None——这步完全画蛇添足,根本没触碰到你要改的层级
  • 你写的elem['cpu'] = 123是在ResourceQuota的根节点新增字段,不是修改spec.hard里的对应值,这就是执行结果多了个cpu: 123的原因
  • 多余的elem['hard'] = None也是错误操作,因为hard是spec的子节点,根节点根本没有这个字段

接下来给你修复好的代码,直接能用:

import sys
import ruamel.yaml

yaml = ruamel.yaml.YAML()
# 保留原YAML的格式(比如引号、缩进风格),这是ruamel.yaml的优势
yaml.preserve_quotes = True

with open('quota-edit.yaml') as fp:
    data = yaml.load(fp)

for elem in data:
    if elem['kind'] == 'ResourceQuota':
        # 精准定位到你要修改的spec.hard层级
        hard_limits = elem['spec']['hard']
        # 修改cpu和memory的值,注意保持和原YAML一致的字符串类型
        hard_limits['cpu'] = "12"
        hard_limits['memory'] = "24Gi"
        break

yaml.dump(data, sys.stdout)

执行这段代码后,你的目标YAML里spec.hard下的cpu和memory就会被改成你设置的值,不会出现多余的字段。

核心逻辑就是:要修改嵌套结构里的值,必须逐层访问到对应的字典节点,直接在根节点操作肯定达不到你要的效果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:22:32