如何使用python在yaml文件中添加映射

2024-04-24 06:48:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个低于yml的文件samplelambda1.yml

Mappings:
  Environments:
    dev:
        DefaultLambdaConcurrency: '10'
    test:
        DefaultLambdaConcurrency: '10'
    staging:
        DefaultLambdaConcurrency: '10'
    production:
        DefaultLambdaConcurrency: '10'

我有多个文件,比如samplelambda2,3,4…30

我需要在python脚本的帮助下为所有yml文件添加另一个映射,我们如何才能做到这一点?我尝试了字符串替换,但打开一个文件并替换多行是一个复杂的操作

production-new:
    DefaultLambdaConcurrency: '10'

3条回答

感谢@kaushal,下面的代码对我有用

对于多个文件,我在for循环中迭代代码

data={}

with open("test.yml") as ymlfile:
    data = yaml.load(ymlfile, Loader=yaml.FullLoader)
    print(data)

data['Mappings']['Environments']['production-new'] = {'DefaultLambdaConcurrency': '10'}

print(data)

with open("test.yml",'w') as ymlfile:
    dumpdata = yaml.dump(data)
    ymlfile.write(dumpdata)

这个问题没有表现出任何努力(没有冒犯,但OP应该尝试他的方法,在他被卡住的地方发帖),所以这里只是一个提示

import os

for filename in os.listdir(directory):
    // read each YAML using this: https://stackoverflow.com/a/1774043/5353128
    // add your key value in the read YAML dict.
    // Use yaml.dump() to save the content back to file.

可以使用pyyaml在python中处理yaml文件。要添加到现有yaml,您可以执行以下操作:

import yaml

with open("file_append.yaml", "r") as fs:
        append_dict = yaml.load(fs, Loader=yaml.SafeLoader)

append_to = ["file_1.yaml"]

for file_name in append_to:
    with open(file_name, "r") as fs:
            target_dict = yaml.load(fs, Loader=yaml.SafeLoader)

    target_dict["Mappings"]["Environments"] = {**target_dict["Mappings"]["Environments"], **append_dict}

    with open(file_name, "w") as fs:
            yaml.dump(target_dict, fs)

输出:

Mappings:
  Environments:
    dev:
      DefaultLambdaConcurrency: '10'
    production:
      DefaultLambdaConcurrency: '10'
    production-new:
      DefaultLambdaConcurrency: '10'
    staging:
      DefaultLambdaConcurrency: '10'
    test:
      DefaultLambdaConcurrency: '10'

相关问题 更多 >