ruamel - block_seq_indent 和缩进
ruamel - block_seq_indent and indent
在使用 yaml.round_trip_dump
后,我一直在努力让我的 YAML 文件具有正确的缩进。我想弄清楚 block_seq_indent
和 indent
之间有什么区别。在文档中也找不到任何有用的东西。
indent
是 ruamel.yaml 继承自 PyYAML 的正常缩进。它会影响映射键和序列元素。对于序列,这意味着它不会影响序列元素之前的散列 ('-')。
所以如果你 运行:
import sys
import ruamel.yaml
d = dict(a=1, b=[1, 2, {3: [3.1, 3.2, 3.3]}], c=dict(d=1, e=2))
ruamel.yaml.safe_dump(d, sys.stdout, default_flow_style=False, explicit_start=True)
ruamel.yaml.safe_dump(d, sys.stdout, default_flow_style=False, indent=4, explicit_start=True)
输出将是:
---
a: 1
b:
- 1
- 2
- 3:
- 3.1
- 3.2
- 3.3
c:
d: 1
e: 2
---
a: 1
b:
- 1
- 2
- 3:
- 3.1
- 3.2
- 3.3
c:
d: 1
e: 2
如果你还提供block_seq_indent
你可以这样做:
ruamel.yaml.safe_dump(d, sys.stdout, default_flow_style=False, indent=4,
block_seq_indent=3, explicit_start=True)
得到:
a: 1
b:
- 1
- 2
- 3:
- 3.1
- 3.2
- 3.3
c:
d: 1
e: 2
要获得更多控制,您应该使用新的 ruamel.yaml
API,您可以这样做:
yaml = ruamel.yaml.YAML()
yaml.indent(mapping=3, sequence=5, offset=2)
yaml.explicit_start = True
yaml.dump(d, sys.stdout)
得到:
a: 1
b:
- 1
- 2
- 3:
- 3.1
- 3.2
- 3.3
c:
d: 1
e: 2
即您可以使用 offset
将破折号定位在作为序列元素缩进的空格内。
这已记录在案 here
在使用 yaml.round_trip_dump
后,我一直在努力让我的 YAML 文件具有正确的缩进。我想弄清楚 block_seq_indent
和 indent
之间有什么区别。在文档中也找不到任何有用的东西。
indent
是 ruamel.yaml 继承自 PyYAML 的正常缩进。它会影响映射键和序列元素。对于序列,这意味着它不会影响序列元素之前的散列 ('-')。
所以如果你 运行:
import sys
import ruamel.yaml
d = dict(a=1, b=[1, 2, {3: [3.1, 3.2, 3.3]}], c=dict(d=1, e=2))
ruamel.yaml.safe_dump(d, sys.stdout, default_flow_style=False, explicit_start=True)
ruamel.yaml.safe_dump(d, sys.stdout, default_flow_style=False, indent=4, explicit_start=True)
输出将是:
---
a: 1
b:
- 1
- 2
- 3:
- 3.1
- 3.2
- 3.3
c:
d: 1
e: 2
---
a: 1
b:
- 1
- 2
- 3:
- 3.1
- 3.2
- 3.3
c:
d: 1
e: 2
如果你还提供block_seq_indent
你可以这样做:
ruamel.yaml.safe_dump(d, sys.stdout, default_flow_style=False, indent=4,
block_seq_indent=3, explicit_start=True)
得到:
a: 1
b:
- 1
- 2
- 3:
- 3.1
- 3.2
- 3.3
c:
d: 1
e: 2
要获得更多控制,您应该使用新的 ruamel.yaml
API,您可以这样做:
yaml = ruamel.yaml.YAML()
yaml.indent(mapping=3, sequence=5, offset=2)
yaml.explicit_start = True
yaml.dump(d, sys.stdout)
得到:
a: 1
b:
- 1
- 2
- 3:
- 3.1
- 3.2
- 3.3
c:
d: 1
e: 2
即您可以使用 offset
将破折号定位在作为序列元素缩进的空格内。
这已记录在案 here