是否可以使用ruamel.yaml以以下格式输出序列:
-
key1: 1
key2: 2
key3: 3
代替标准
- key1: 1
key2: 2
key3: 3
...还有这个
- skills:
- Python
- Perl
代替标准...
- skills:
- Python
- Perl
第二个示例是yaml.indent(sequence = 4, offset = 2)
的用途。但是顶层列表也会缩进去:
- skills:
- Python
- Perl
答案 0 :(得分:0)
从本质上讲,这是两个问题:第一个是如何预防的 获取默认的紧凑表示形式,第二个使用 不同的序列有不同的压痕。
从第一个开始:您可以使用.compact()
方法(请确保
已安装ruamel.yaml>=0.15.73
)
import sys
import ruamel.yaml
yaml_str = """\
-
key1: 1
key2: 2
key3: 3
"""
yaml = ruamel.yaml.YAML()
yaml.compact(seq_map=False)
data = yaml.load(yaml_str)
yaml.dump(data, sys.stdout)
给出:
-
key1: 1
key2: 2
key3: 3
如果您不想紧凑,也可以提供seq_seq=False
作为.compact()
的参数
序列中的序列(看起来像- - abc
)
第二个不可能开箱即用,因为缩进(和 压缩)始终应用于所有序列 分别甚至是根级序列的映射。
最好是使用转换函数:
import sys
import ruamel.yaml
yaml_str = """\
- skills:
- Python
- Perl
"""
def dedent2(s):
return ''.join([x[2:] if x.startswith(' ') else x for x in s.splitlines(True)])
yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4, offset=2)
data = yaml.load(yaml_str)
yaml.dump(data, sys.stdout, transform=dedent2)
给出:
- skills:
- Python
- Perl