ruamel.yaml - YAML 中序列的特定格式
问题描述
是否可以使用 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
解决方案
这本质上是两个问题:第一个是关于如何防止获得默认的紧凑表示,第二个是关于对不同的序列使用不同的缩进。
从第一个开始:您可以使用以下.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
推荐阅读
- java - 使用Jsoup为Android studio提取数据
- react-native - redux thunk 中的 AsyncStorage,操作未调度
- mysql - 如何使用 mySQL 将两列 ID 转换为两列名称?
- java - 如何确定 Java 应用程序的主类?
- android - 带有标题的 Xamarin android 弹出菜单
- hibernate - Spring Rest Data 投影@OneToOne 属性未加载
- java - 使用 @component 定义 bean 并从 XML 读取 List 时出错
- jsonschema - 一个属性的 json 模式依赖于另一个属性的值
- vba - 如何在 VBA 中选择随机单元格?
- javascript - es6 语法括号使这个简短但无法理解