ruamel.yaml - 缩进序列不起作用?
ruamel.yaml - indent sequences not working?
MWE:
import sys
from ruamel.yaml import YAML
yaml = YAML(typ='safe')
yaml.default_flow_style = False
yaml.indent(sequence=4, mapping=2, offset=2)
d = {
'name': 'asdf',
'types': [
1,
2,
],
'class': 1,
}
import sys
yaml.dump(d, sys.stdout)
>>>
class: 1
name: asdf
types:
- 1
- 2
我希望类型在 -
条目之前有一个缩进 -- 为什么不是这样?文档相当稀缺,而且 yaml.indent 方法在这里似乎没有任何效果,无论我尝试组合值...
py 3.6.4 / winx64, ruamel 0.15.35
这不起作用的原因是因为您使用 typ='safe'
给您 SafeLoader()
并且不支持序列和映射之间的缩进差异。它由(默认)round-trip-loader(它是 "normal" SafeLoader()
的子类)
提供
所以只需更改:
yaml = YAML(typ='safe')
至
yaml = YAML()
或
yaml = YAML(typ='rt')
如果你想 round-trip-this 并且在你的程序中有正常的 dict
s 和 list
s,而不是保留 CommentedMap()
和 CommentedList()
的注释其子类,你可以这样做:
import sys
import ruamel.yaml
yaml_str = """\
class: 1
name: asdf
types:
- 1
- 2
"""
yamll = ruamel.yaml.YAML(typ='safe')
yamld = ruamel.yaml.YAML()
yamld.indent(mapping=4, sequence=4, offset=2)
data = yamll.load(yaml_str)
assert type(data) == dict
yamld.dump(data, sys.stdout)
MWE:
import sys
from ruamel.yaml import YAML
yaml = YAML(typ='safe')
yaml.default_flow_style = False
yaml.indent(sequence=4, mapping=2, offset=2)
d = {
'name': 'asdf',
'types': [
1,
2,
],
'class': 1,
}
import sys
yaml.dump(d, sys.stdout)
>>>
class: 1
name: asdf
types:
- 1
- 2
我希望类型在 -
条目之前有一个缩进 -- 为什么不是这样?文档相当稀缺,而且 yaml.indent 方法在这里似乎没有任何效果,无论我尝试组合值...
py 3.6.4 / winx64, ruamel 0.15.35
这不起作用的原因是因为您使用 typ='safe'
给您 SafeLoader()
并且不支持序列和映射之间的缩进差异。它由(默认)round-trip-loader(它是 "normal" SafeLoader()
的子类)
所以只需更改:
yaml = YAML(typ='safe')
至
yaml = YAML()
或
yaml = YAML(typ='rt')
如果你想 round-trip-this 并且在你的程序中有正常的 dict
s 和 list
s,而不是保留 CommentedMap()
和 CommentedList()
的注释其子类,你可以这样做:
import sys
import ruamel.yaml
yaml_str = """\
class: 1
name: asdf
types:
- 1
- 2
"""
yamll = ruamel.yaml.YAML(typ='safe')
yamld = ruamel.yaml.YAML()
yamld.indent(mapping=4, sequence=4, offset=2)
data = yamll.load(yaml_str)
assert type(data) == dict
yamld.dump(data, sys.stdout)