python: 如何在 yaml 文件中添加新的键和值

python: how to add a new key and a value in yaml file

我有以下 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 

一旦你加载了那个 YAML 文件,你的 pod 就是一个只有一个键 spec 的字典。您可以检查该键 (print(pod['spec']) 的值,您会看到它是字典,只有一个键 containers。由于您想向该字典添加一个额外的键 nodeSelector,因此您应该添加到 pod['spec']:

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

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


@zwer 在他的评论中给出的"solution":

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

spec:
  nodeSelector:
    key: val

即替换 spec 的值,从而用键 containers.

删除现有的 dict/mapping