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

