从 python 中的 yaml 字典中删除键值对



例如,我们想使用 python 从 YAML 文件中删除键和值

- misc_props:
- attribute: tmp-1
value: 1
- attribute: tmp-2
value: 604800
- attribute: tmp-3
value: 100
- attribute: tmp-4
value: 1209600
name: temp_key1
attr-1: 20
attr-2: 1
- misc_props:
- attribute: tmp-1
value: 1
- attribute: tmp-2
value: 604800
- attribute: tmp-3
value: 100
- attribute: tmp-4
value: 1209600
name: temp_key2
atrr-1: 20
attr-2: 1

从上面的例子中,我们想删除整堆属性,其中键名与值匹配,例如,如果我们想删除 name: temp_key2删除后新创建的字典将如下所示:-

- misc_props:
- attribute: tmp-1
value: 1
- attribute: tmp-2
value: 604800
- attribute: tmp-3
value: 100
- attribute: tmp-4
value: 1209600
name: temp_key1
attr-1: 20
attr-2: 1

仅仅删除键值对来获得所需的输出是不够的。

import sys
import ruamel.yaml

yaml = ruamel.yaml.YAML()
with open('input.yaml') as fp:
data = yaml.load(fp)
del data[1]['misc_props']
yaml.dump(data, sys.stdout)

因为这给出了:

- misc_props:
- attribute: tmp-1
value: 1
- attribute: tmp-2
value: 604800
- attribute: tmp-3
value: 100
- attribute: tmp-4
value: 1209600
name: temp_key1
attr-1: 20
attr-2: 1
- name: temp_key2
atrr-1: 20
attr-2: 1

您需要做的是删除序列中的一项 YAML 结构的根:

del data[1]
yaml.dump(data, sys.stdout)

这给了:

- misc_props:
- attribute: tmp-1
value: 1
- attribute: tmp-2
value: 604800
- attribute: tmp-3
value: 100
- attribute: tmp-4
value: 1209600
name: temp_key1
attr-1: 20
attr-2: 1

您是否尝试过使用 yaml 模块?

import yaml
with open('./old.yaml') as file:
old_yaml = yaml.full_load(file)
#This is the part of the code which filters out the undesired keys
new_yaml = filter(lambda x: x['name']!='temp_key2', old_yaml) 
with open('./new.yaml', 'w') as file:
documents = yaml.dump(new_yaml, file)

最新更新