如何在 Python 中合并 YAML 文件?

如何在 Python 中合并 YAML 文件?

我有一些需要合并的 Kubernetes YAML 文件。

为此我尝试使用 Python。

第二个文件(sample.yaml)应该合并到第一个文件 source.yaml 中,例如,source.yaml 有一个部分 sample:,完整的 sample.yaml 应该被转储到其中。

因此,我尝试使用下面的代码。

#pip install pyyaml
import yaml

def yaml_loader(filepath):
    #Loads a yaml file
    with open(filepath,'r')as file_descriptor:
        data = yaml.load(file_descriptor)
    return data

def yaml_dump(filepath,data):
    with open(filepath,"w") as file_descriptor:
        yaml.dump(data, file_descriptor)


if __name__ == "__main__":
    file_path1 = "source"
    data1 = yaml_loader(file_path1)
    file_path2 = "sample.yaml"

    with open(file_path2, 'r') as file2:
        sample_yaml = file2.read()
    data1['data']['sample'] = sample_yml
    yaml_dump("temp.yml", data1)

这将创建一个新的文件 temp.yml,但不是换行符,而是将 \n 保存为字符串。

最终文件快照

我怎样才能解决这个问题?

答案1

Stackoverflow.com 是提出此类问题的正确场所。他们关闭您的问题的原因是您问错了。

尽管您想合并两个文件,但在 Python 中,您需要将两个 yaml 文件加载到字典中,合并这两个字典,然后将生成的字典转储到一个文件中。请注意,下面我添加了一些 yaml 转储器选项,这些选项应该有助于后者的使用。

您的data = yaml.load(file_descriptor)功能yaml_loader()可能需要更改为data = yaml.load(file_descriptor, Loader=yaml.SafeLoader)

你的新的主要功能将类似于

if __name__ == "__main__":
    file_path1 = "source.yaml"
    file_path2 = "sample.yaml"

    # read both yaml files as Dictionaries
    data1 = yaml_loader(file_path1)
    data2 = yaml_loader(file_path2)

    # Merge the dictionaries
    data1.update(data2) # Feel free to reverse the order of data1 and data2 and then update the dumper below
   
    # Write the merged dictionary to a new file
    with open("temp.yml", 'w') as yaml_output:
      yaml_dump(data1, yaml_output, default_flow_style=False, explicit_start=True, allow_unicode=True )

编辑:对于 Stackoverflow,问题应该是“在 Python 中:如何将两个 yaml 文件加载为字典,合并它们,然后将结果写入第三个文件?”(你可以谷歌一下)而不是“如何合并两个文件”

相关内容