python:如何在yaml文件中添加新密钥和值

问题描述 投票:4回答:1

我有以下YAML文件。我需要使用python使用新的键值对更新YAML文件。

我正在做以下但是,它给了我错误:

pod = mylib.load_yaml("net/pod.yaml")
pod['spec']['nodeSelector']['key']='val'

它给出了KeyError:'nodeSelector'的错误

spec:
  containers:
  - image: ceridwen/networking:v1
    imagePullPolicy: Always
    name: networking
    readinessProbe:
      tcpSocket:
        port: 5000
      initialDelaySeconds: 5
      periodSeconds: 1
    restartPolicy: Always

我需要用新的键值更新它

spec:
  containers:
  - image: ceridwen/networking:v1
    imagePullPolicy: Always
    name: networking
    readinessProbe:
      tcpSocket:
        port: 5000
      initialDelaySeconds: 5
      periodSeconds: 1
    restartPolicy: Always
  nodeSelector:
    key: value 
python python-3.x yaml pyyaml
1个回答
2
投票

一旦你加载了YAML文件,你的pod就是一个带有单个密钥spec的字典。您可以检查该密钥的值(print(pod['spec']),您将看到这是dict,只需一个密钥containers。既然你想在该字典中添加一个额外的密钥nodeSelector,你应该添加到pod['spec']

pod['spec']['nodeSelector'] = dict(key='value')

请注意,你输出中的key:value(在:之后没有空格且在keyvalue周围没有引号),不是映射而是单个标量字符串。


@zwer在评论中给出的“解决方案”:

pod["spec"] = {"nodeSelector": {"key": "val"}}不正确,因为它将转储为:

spec:
  nodeSelector:
    key: val

即替换spec的值,从而删除密钥containers的现有字典/映射。

© www.soinside.com 2019 - 2024. All rights reserved.