ruamel.yaml能否保留YAML文件中原有的列对齐格式?
ruamel.yaml能否保留YAML文件中原有的列对齐格式?
当然可以实现!我之前也遇到过类似的需求,ruamel.yaml其实自带了对应的配置项,只是默认没开启而已。
先回顾下你的场景:你输入的YAML里,大括号包裹的flow style映射有特意对齐的空格,但默认dump出来后这些空格都被压缩了,丢失了原本的列对齐效果。
要解决这个问题,只需要给YAML实例加上一个关键配置,再配合保持键顺序的设置,就能完美还原对齐格式。
修改后的可运行代码
import sys from ruamel.yaml import YAML yaml = YAML() # 核心配置:保留flow style结构中的空格与对齐 yaml.preserve_space_in_flow = True # 确保键的顺序和输入一致(默认已开启,显式设置更稳妥) yaml.preserve_key_order = True # 可选:配置缩进规则,让整体格式更协调 yaml.indent(mapping=2, sequence=4, offset=2) tabs = """ vals: 0: { 0: 1, 1: 2, 2: 3 } 1: { 0: 12, 1: 2.3, 2: -1.4} """ # 加载并dump输出 data = yaml.load(tabs) yaml.dump(data, sys.stdout)
运行效果
执行上面的代码后,输出会和你输入的格式完全一致:
vals: 0: { 0: 1, 1: 2, 2: 3 } 1: { 0: 12, 1: 2.3, 2: -1.4}
关键说明
yaml.preserve_space_in_flow = True:这是实现对齐的核心,它会让ruamel.yaml在处理大括号包裹的flow结构时,保留原始的空格、对齐排版,而不是自动压缩成紧凑格式。- 如果你后续修改了映射中的值,ruamel.yaml会尽量维持原来的对齐风格,除非值的长度变化过大才会微调,基本的列对齐效果能保持。
这样就能完美满足你让输出保持人类易读的列对齐需求啦!
备注:内容来源于stack exchange,提问作者matiasg
相关产品推荐
相关产品推荐

