如何使用ruamel.yaml格式化嵌套列表 提升YAML配置可读性
YAML嵌套列表排版优化方案
你可以通过调整ruamel.yaml的格式配置,结合自定义的序列格式属性设置,实现需要的嵌套列表排版效果,以下是可直接运行的修改后代码:
from ruamel.yaml import YAML as Ruamel from pathlib import Path yaml = Ruamel(typ='rt') # 配置缩进规则,匹配原有YAML的缩进习惯 yaml.indent(mapping=6, sequence=4, offset=2) # 全局流式格式设置为自动判断 yaml.default_flow_style = None # 设置极小的换行宽度,强制流式列表超出长度后自动换行 yaml.width = 1 # 禁用括号对的默认紧凑排版 yaml.brace_single_line = False config_file = Path('/Users/test_config.yaml') configs = yaml.load(config_file.read_text()) # 递归处理所有符合条件的嵌套列表格式 def format_nested_lists(obj): if isinstance(obj, dict): for val in obj.values(): format_nested_lists(val) elif isinstance(obj, list): # 检测两层嵌套的列表,设置为流式格式 if obj and isinstance(obj[0], list): obj.fa.set_flow_style() for item in obj: item.fa.set_flow_style() else: for item in obj: format_nested_lists(item) format_nested_lists(configs) component_file = "xyz.txt" with open(component_file, 'w') as component: yaml.dump(configs, component)
关键配置说明
yaml.indent(mapping=6, sequence=4, offset=2):指定映射(键值对)缩进6个空格,序列(列表)缩进4个空格,列表短横线的偏移量为2,和原有YAML的缩进规则对齐yaml.width = 1:强制让流式列表只要长度超过1就触发换行,实现左括号后换行、每个子列表单独占行、右括号单独成行的效果set_flow_style():给嵌套列表单独设置流式格式,保证列表保持方括号包裹的形式,不会被转换为每个元素前带-的块式列表
运行上述代码后输出的YAML就会完全符合要求的排版格式。
内容的提问来源于stack exchange,提问作者iDev
相关产品推荐
相关产品推荐

