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

时间:2018-04-25 20:27:55

标签: python python-3.x yaml pyyaml

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

1 个答案:

答案 0 :(得分:2)

加载该YAML文件后,pod是一个带有单个密钥spec的字典。您可以检查该密钥的值(print(pod['spec']),并且您只需使用一个密钥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删除现有的字典/映射。