我正在开发一个项目,我需要解析一个YAML文件并将其内容写入另一个文件中。现在,键值可以为空,在这种情况下,应该忽略该值,即不应该写入文件中。我可以编写一个“if语句”来检查值是否为空,只有在文件写入时才写入文件,但有没有更简单的方法呢?
答案 0 :(得分:0)
使用if
过滤空键是正常的'实现这一目标的方法。
您可以使用if
作为词典理解的一部分,在一个步骤中删除所有具有空值的键,然后使用此新词典。
import yaml
with open("my.yaml") as yaml_f:
data = {k: v for k, v in yaml.safe_load(yaml_f.read()).items() if v}
当然,这只是编写完整循环的另一种方法:
data = {}
with open("my.yaml") as yaml_f:
for k, v in yaml.safe_load(yaml_f.read()).items():
if v:
data[k] = v
注意 - 有一些方法可以设置yaml
模块来修改从yaml文件生成的结果字典 - 但是这需要在yaml中使用标记。例如:
import yaml
my_yaml = """
--- !MyTag
a: 1
b: 2
c: ""
"""
def constructor_none(loader, node):
return {k: v for k, v in loader.construct_mapping(node).items() if v}
yaml.add_constructor('!MyTag', constructor_none)
yaml.safe_load(my_yaml)
# {'a': 1, 'b': 2}