You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PyYAML在YAML序列元素之间添加换行分隔符

解决方法

方法1:逐元素序列化(简单易实现,无需额外配置)

遍历列表中的每个字典单独序列化写入,每次写完一个元素后手动插入空行即可,示例代码如下:

import yaml

dict_1 = {'name'  : 'name1',
          'value' : 12,
          'list'  : [1, 2, 3],
          'type'  : 'doc'
}

dict_2 = {'name'  : 'name2',
          'value' : 100,
          'list'  : [1, 2, 3],
          'type'  : 'cpp'
}

file_info = [dict_1, dict_2]

with open('test_file.yaml', 'w+') as f:
    for idx, item in enumerate(file_info):
        # 将单个字典包成列表序列化,自动生成`-`开头的块结构
        yaml.dump([item], f)
        # 最后一个元素无需额外加空行可加此判断,不需要可以直接删
        if idx != len(file_info) - 1:
            f.write('\n')

如果需要保留原字典的键顺序,避免PyYAML默认按字母序重排键,可以在yaml.dump中添加参数sort_keys=False。

方法2:自定义Dumper类(适合批量复用场景)

如果需要在多处分隔序列项,可以继承PyYAML的Dumper类重写序列序列化逻辑,一劳永逸:

import yaml
from yaml.dumper import Dumper

class SpacedListDumper(Dumper):
    pass

def represent_spaced_sequence(dumper, data):
    nodes = [dumper.represent_data(item) for item in data]
    return dumper.represent_sequence('tag:yaml.org,2002:seq', nodes, flow_style=False)

SpacedListDumper.add_representer(list, represent_spaced_sequence)

# 使用时指定自定义Dumper即可
with open('test_file.yaml', 'w+') as f:
    yaml.dump(file_info, f, Dumper=SpacedListDumper)

原尝试方案失效原因

往列表中插入\n、None这类元素的方案,会被PyYAML识别为合法的序列项进行序列化,生成- ""、- null这类无效内容,无法达到插入空行的效果。


内容的提问来源于stack exchange,提问作者Tonysres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:54:00