使用Ruamel.yaml导出YAML时自动添加"..."行的问题求助
解决ruamel.yaml导出YAML流时自动添加"..."的问题
我懂你用ruamel.yaml处理Ansible角色的main.yml生成README时的糟心情况——每导出一行YAML内容就自动插一行...,完全打乱了想要的文档格式。
先给你拆解下问题根源:ruamel.yaml默认会把每一段独立的YAML节点当成一个完整的文档片段,而...是YAML规范里标记文档结束的符号,所以它就自动加上了。
下面给你几个实用的解决办法:
方案1:调整YAML对象配置,关闭自动添加文档结束符
初始化ruamel.yaml的YAML对象时,设置explicit_end=False就能直接禁用这个自动添加的行为。如果还要保留原YAML的格式细节,比如引号、流式风格,可以再加上preserve_quotes=True和default_flow_style=None。
修改后的代码片段如下:
yaml = ruamel.yaml.YAML() yaml.explicit_end = False # 核心配置:关掉自动插入的文档结束符 yaml.preserve_quotes = True # 保留原文件的引号格式 yaml.default_flow_style = None # 保持原有的流式/块式风格
之后再读取并输出main.yml内容,就不会出现多余的...了。
方案2:一次性读取输出整个YAML内容
如果不需要逐行处理YAML节点,直接把整个文件当作一个完整文档读取输出,也能避开这个问题。示例代码:
with open('main.yml', 'r') as f: data = yaml.load(f) # 将内容写入README文档 with open('README.md', 'a') as f: yaml.dump(data, f)
方案3:手动过滤输出行
如果必须逐行处理内容,那可以在输出前手动筛掉包含...的行,比如:
for line in yaml.dump_all(data, stream=None): if line.strip() != '...': # 写入到README或其他目标位置 print(line, end='')
另外提个小细节:你脚本里argparse的-r参数帮助文本没写完,记得补全哦,比如改成help="specify the target Ansible role name or path"会更清晰。
内容的提问来源于stack exchange,提问作者Isador
相关产品推荐
相关产品推荐

