【问题标题】:How to combine YAML files in python?如何在 python 中合并 YAML 文件?
【发布时间】:2021-07-23 22:07:03
【问题描述】:

我有一些需要合并的 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 保存为字符串:

如何解决这个问题?

【问题讨论】:

  • 您正在以字符串/字节的形式读取第二个文件。您是否还应该在第二个文件上使用yaml_loader() 来获取另一个字典,然后合并字典?
  • 我试过了,但它篡改了同名的部分。有没有办法按原样转储第二个 yaml 并只保留行间距而不是 \n?
  • 您正在做的是将第二个 YAML 作为单个字符串包含在内。您会得到\n 和双引号,因为您将单个字符串值分配给sample。如果您想包含第二个文件的 YAML 中描述的数据结构,您必须将其加载为 YAML,以便 Python 理解该结构。
  • 要获得任何帮助,您必须添加两个 yaml 文件的代表性示例。
  • 请将输入文件的(简短)样本添加到您的问题中,以便它是minimal reproducible example

标签: python yaml


【解决方案1】:

您的原始 YAML 可能有问题。如果您使用 VS Code,请格式化您的 YAML 文件。点击vscode底部(如果使用相同)[空格]

并选择将缩进转换为空格

另外,您可以在加载文件时检查 YAML 模块是否有任何要配置的缩进属性

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 2016-06-13
    • 2010-10-23
    • 2010-12-18
    • 2018-12-19
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多