我想为YAML文件的键顺序和行距设置一个模板,并将其应用到我拥有的100个YAML文件的存储库中.总的来说,我想做以下几件事:
- 加载现有的YAML文件
- 根据模板对键和值进行重新排序
- 删除仅为换行符的所有注释
- 应用模板中的行距
- 保存YAML文件
我用的是python 3.10和ruamel.yaml版本.在一个非常基本的层面上,我理解ruamel.yaml中的YAML对象是基于一个有序字典的,接受的答案here似乎是一种确保字典键的特定顺序的简单方法,但我不知道如何将其应用于YAML对象.
为了维护注释,我假定可以复制.ca
属性,尽管我不知道如何应用模板中的行距规则.
使问题更加复杂的是,一些键本身可能有多个值(我认为在ruamel.yaml中这些值应该是CommentedSequence
),每个值都应该遵循模板顺序-最后一个键后面需要一个空行.
以下是模板的基本版本,它应该提供我所讨论的 struct 的概述:
template='''
name:
region:
origin:
description:
go_live_date:
status:
governance:
business_owner:
am:
eu:
ap:
technical_owner:
am:
eu:
ap:
architecture:
protocol:
platform:
environments:
- name:
description:
tier:
locations:
'''
在下面的示例中,键顺序错误,有缺失和双倍行距加上一些注释:
'''
name: MyApp
description: My wonderful application
origin: internal
governance:
technical_owner:
am:
- Nico Ferrell
ap:
- Benedict Berger
- Elsie Parsons
eu:
- Frances Case
business_owner:
eu:
- Audrey Dalton
am:
- John Carpenter # to be updated
architecture:
protocol: [TCP]
platforms: [python_3_10, java_16]
status: in production
go_live_date: 2024-01-01
environments:
- name: EU Prod
description: production environment for EMEA
tier: production
locations: [ABC, XYZ]
- name: EU UAT
description: UAT environment for EMEA
locations: [LMN]
tier: uat
# further environmental details to be added
'''
将模板和步骤应用于此示例后,生成的文件应如下所示:
'''
name: MyApp
origin: internal
description: My wonderful application
status: in production
go_live_date: 2024-01-01
governance:
technical_owner:
am:
- Nico Ferrell
eu:
- Frances Case
ap:
- Benedict Berger
- Elsie Parsons
business_owner:
am:
- John Carpenter # to be updated
eu:
- Audrey Dalton
architecture:
protocol: [TCP]
platforms: [python_3_10, java_16]
environments:
- name: EU Prod
description: production environment for EMEA
tier: production
locations: [ABC, XYZ]
- name: EU UAT
description: UAT environment for EMEA
tier: uat
locations: [LMN]
# further environmental details to be added
'''
我不知道该怎么处理这件事,希望能帮上忙