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,并且 key
和 value
周围没有引号) , 不是映射而是单个标量字符串。
@zwer 在他的评论中给出的"solution":
pod["spec"] = {"nodeSelector": {"key": "val"}}
不正确,因为它将转储为:
spec:
nodeSelector:
key: val
即替换 spec
的值,从而用键 containers
.
删除现有的 dict/mapping
我有以下 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,并且 key
和 value
周围没有引号) , 不是映射而是单个标量字符串。
@zwer 在他的评论中给出的"solution":
pod["spec"] = {"nodeSelector": {"key": "val"}}
不正确,因为它将转储为:
spec:
nodeSelector:
key: val
即替换 spec
的值,从而用键 containers
.