代码之家  ›  专栏  ›  技术社区  ›  Invictus

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

  •  7
  • Invictus  · 技术社区  · 6 年前

    我有以下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 回复  |  直到 6 年前
        1
  •  6
  •   Anthon Rujikin    5 年前

    加载YAML文件后 pod 是一个单键的dict spec 。您可以检查该键的值( print(pod['spec'] )你会看到那是dict,只有一个键 containers 。因为您想添加一个额外的密钥 nodeSelector 你应该补充到 pod['spec'] :

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

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


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

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

    spec:
      nodeSelector:
        key: val
    

    i、 e.替换的值 规格 从而用键删除现有的dict/mapping 容器