如何获取“安全”和“往返”的类似格式的 yaml

Mat*_*att 5 yaml ruamel.yaml

ruamel.yaml根据是否使用saferound-trip表示器,以不同的方式格式化简单但嵌套的字典。

我不明白为什么不同的代表者应该以不同的方式格式化这样一个简单的字典,所以我想知道如何让代表safe者看起来与round-trip以下示例中的相似:

from ruamel.yaml import YAML
import sys

data = {'data': {'interval': 5, 'compression': '3'}, 'player': {'ffmpeg': {'name': 'me'}}}
yaml = YAML(typ='safe')
yaml.dump(data, sys.stdout)
Run Code Online (Sandbox Code Playgroud)

这打印

data: {compression: '3', interval: 5}
player:
  ffmpeg: {name: me}
Run Code Online (Sandbox Code Playgroud)

data: {compression: '3', interval: 5}
player:
  ffmpeg: {name: me}
Run Code Online (Sandbox Code Playgroud)

打印出更好的输出:

data:
  interval: 5
  compression: '3'
player:
  ffmpeg:
    name: me
Run Code Online (Sandbox Code Playgroud)

如何获得safe打印相似度的版本?

Ant*_*hon 7

"safe"模式的输出是 PyYAML(ruamel.yaml 最初派生自其中)默认给出的内容,“叶集合”采用流样式。这比默认值 ( ) 的全块样式输出更紧凑,而默认值 ( )typ="rt"并不总是能提高可读性。特别是在总项目数较少的情况下(因此总数适合一个窗口),或者当叶集合有许多项目时(并且它们覆盖多行)。

所以往返默认为全块样式的原因是因为我同意它看起来更好。当然,当往返用于其预期目的时,每个系列的原始风格都会被保留。

差异是由设置为for模式和 to for模式的实例default_flow_style上的属性引起的:YAML()None"safe"False"rt"

import sys
import ruamel.yaml

data = {'data': {'interval': 5, 'compression': '3'}, 'player': {'ffmpeg': {'name': 'me'}}}


yaml = ruamel.yaml.YAML(typ="safe")
yaml.default_flow_style = False
yaml.dump(data, sys.stdout)
Run Code Online (Sandbox Code Playgroud)

这使:

data:
  compression: '3'
  interval: 5
player:
  ffmpeg:
    name: me
Run Code Online (Sandbox Code Playgroud)

如果将该属性设置为,True您将获得完全流式的输出。