ruamel.yaml将YAML列表转为多文档插入---的问题及解决方法
解决ruamel.yaml dump_all生成多文档的问题
问题根源在于dump_all的设计用途——它是用来序列化多个独立YAML文档的。如果你直接把加载得到的列表传给它,它会把列表里的每个字典当成单独的文档处理,所以自动插入---分隔符。
有两种直接可行的解决方式:
1. 用dump替代dump_all(推荐)
如果你的需求只是输出单个列表文档,直接用dump方法即可,这是处理单个YAML文档的标准用法:
from ruamel.yaml import YAML yaml = YAML() # 加载原文件的单个列表文档 with open("original.yaml", "r") as f: data = yaml.load(f) # 用dump输出单个文档,保持原列表结构 with open("output.yaml", "w") as f: yaml.dump(data, f)
2. 必须用dump_all时的处理
如果因为特定场景(比如要和其他文档合并输出)必须使用dump_all,只需把加载得到的列表包装成一个新的列表,让dump_all把整个原列表当作单个文档处理:
from ruamel.yaml import YAML yaml = YAML() with open("original.yaml", "r") as f: data = yaml.load(f) # 把原列表作为单个元素传入dump_all,避免被拆分 with open("output.yaml", "w") as f: yaml.dump_all([data], f)
以上两种方式都能让输出文件保持原有的单个列表结构,不会被拆分成带---的多文档形式。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

