使用以下数据
from ruamel import yaml
data = {1: {1:[{1:1,2:2},{1:1,2:2}], 2:2}, 2: 42}
我的序列
的缩进不正确>>> print yaml.round_trip_dump(data)
1:
1:
- 1: 1
2: 2
- 1: 1
2: 2
2: 2
2: 42
在Notepad ++上无法折叠。但是通过适当的缩进它可以工作:
为:
好:
我尝试使用block_seq_indent=2
:
>>> print yaml.round_trip_dump(data, block_seq_indent=2)
1:
1:
- 1: 1
2: 2
- 1: 1
2: 2
2: 2
2: 42
我该如何解决这个问题?
答案 0 :(得分:9)
ruamel.yaml
文档尽管通常缺乏,但会在缩进内显示以下关于offset
短划线的内容:
如果偏移量等于序列,则没有足够的空间容纳短划线和必须遵循它的空间。在这种情况下,元素本身通常会被推送到下一行(而旧版本的ruamel.yaml就这样做了)。但这是无法发生的。但是,缩进级别是用于计算更深级别的累积缩进并指定sequence = 3 resp的级别。 offset = 2,可能会给出正确但反直觉的结果。
最好总是有序列> =偏移+ 2 ,但这不是强制执行。根据您的结构,不遵循此建议可能会导致无效输出。
默认情况下indent
(对于映射和序列)等于2,如果你这样做:
import sys
from ruamel import yaml
data = {1: {1:[{1:1,2:2},{1:1,2:2}], 2:2}, 2: 42}
yml = yaml.YAML()
yml.indent(mapping=2, sequence=4, offset=2)
yml.dump(data, sys.stdout)
你得到:
1:
1:
- 1: 1
2: 2
- 1: 1
2: 2
2: 2
2: 42
使用您在问题中使用的旧API,您不能以简单的方式对映射和序列进行不同的缩进(您需要子类化Emitter,并在基类的__init__
上),设置值)。对于旧版本的ruamel.yaml,这根本不可能。
这仅适用于默认(往返,即typ='rt'
)转储程序,但适用于普通的Python dict
和。 list
(例如来自YAML(typ='safe').load(....)
)和
在进行YAML().load(....)
(以上要求ruamel.yaml> = 0.15.30)