使用ruamel.yaml导出YAML时如何避免文件末尾自动添加换行符
ruamel.yaml导出YAML去掉末尾换行的实现方法
ruamel.yaml默认执行dump操作时会自动在输出内容末尾追加换行符,若不需要该换行可通过以下方式实现:
- 方案1:先将YAML内容输出到内存流裁剪后再写入文件
该方案兼容性强,适配所有版本的ruamel.yaml,示例代码如下:
from ruamel.yaml import YAML from io import StringIO # YAML配置保持不变 yaml = YAML(typ="rt") yaml.default_flow_style = False yaml.explicit_start = False yaml.indent(mapping=2, sequence=4, offset=2) rip = {"rip_routes": ["23.24.10.0/15", "23.30.0.10/15", "50.73.11.0/16", "198.0.0.0/16"]} file = 'test.yaml' # 先导出到内存流,去掉末尾换行后再写入本地文件 stream = StringIO() yaml.dump(rip, stream) output_content = stream.getvalue().rstrip('\n') with open(file, "w", encoding="utf-8") as f: f.write(output_content)
- 方案2:修改YAML实例的行尾配置
如果使用的是0.17版本及以上的ruamel.yaml,可以直接修改eol属性简化操作:
from ruamel.yaml import YAML yaml = YAML(typ="rt") yaml.default_flow_style = False yaml.explicit_start = False yaml.indent(mapping=2, sequence=4, offset=2) # 直接设置行尾为空,禁止末尾追加换行 yaml.eol = '' rip = {"rip_routes": ["23.24.10.0/15", "23.30.0.10/15", "50.73.11.0/16", "198.0.0.0/16"]} file = 'test.yaml' with open(file, "w", encoding="utf-8") as f: yaml.dump(rip, f)
注意:YAML官方规范允许文件末尾存在 trailing newline,绝大多数工具解析YAML时会自动忽略该换行,仅当业务场景有强制要求时再做以上修改。
内容的提问来源于stack exchange,提问作者senthilkumar S
相关产品推荐
相关产品推荐

