我有一些需要合并的 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 文件加载为字典,合并它们,然后将结果写入第三个文件?”(你可以谷歌一下)而不是“如何合并两个文件”