循环浏览yaml文件中的字典列表,并使用python只更新文件的一部分

2024-04-23 07:23:54 发布

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

我正在尝试动态更新一个包含DICT列表的yaml文件。下面是我的原始yaml文件的一个示例

images:
  - name: image1
    tag: v1
  - name: image2
    tag: v1

我想循环浏览图像,只更新image1的标记,然后将其写入yaml文件。下面是我想要的结果文件

images:
  - name: image1
    tag: v2
  - name: image2
    tag: v1

我目前有一个脚本,允许我更新和打印新的dict,但我无法让它在yaml文件中呈现。下面是我的代码示例

#!/usr/env python
import yaml
 
image_file = yaml.load(open(file.yaml, "r"))

def update_dict(dict, path, value):
    dict_to_update = dict
    key_list = path.split(".")
    for k in key_list[:-1]:
        dict_to_update = dict_to_update[k]
    dict_to_update[key_list[-1]] = value

images = image_file['images']

for image in images:
    if image['name'] == 'image1':
        update_dict(image, "tag", "v2")
        print image
        #prints {'tag': 'v2', 'name': 'image1'}
        with open(file.yaml, "w") as file:
            yaml.dump(image, file)

这将完全覆盖file.yaml,导致

name: image1
tag: v2

有没有办法只动态更新yaml文件的一部分?或者我需要存储整个dict列表,修改所需内容,然后用新的dict列表覆盖file.yaml吗


Tags: 文件tokeynameimageyaml列表tag