Geo*_*ler 5 yaml cross-reference pyyaml
我希望能够在 PyYAML 的 dump() 函数生成的 YAML 中生成锚点。有没有办法做到这一点?理想情况下,锚点与 YAML 节点具有相同的名称。
例子:
import yaml
yaml.dump({'a': [1,2,3]})
'a: [1, 2, 3]\n'
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是生成 YAML,如:
import yaml
yaml.dump({'a': [1,2,3]})
'a: &a [1, 2, 3]\n'
Run Code Online (Sandbox Code Playgroud)
我可以编写自定义发射器或转储器来执行此操作吗?还有其他方法吗?
小智 6
默认情况下,仅当检测到对先前看到的对象的引用时才会发出锚点:
>>> import yaml
>>>
>>> foo = {'a': [1,2,3]}
>>> doc = (foo,foo)
>>>
>>> print yaml.safe_dump(doc, default_flow_style=False)
- &id001
a:
- 1
- 2
- 3
- *id001
Run Code Online (Sandbox Code Playgroud)
如果您想覆盖它的命名方式,则必须自定义Dumper 类,特别是generate_anchor()函数。ANCHOR_TEMPLATE可能也有用。
在您的示例中,节点名称很简单,但您需要考虑 YAML 值的多种可能性,即它可以是序列而不是单个值:
>>> import yaml
>>>
>>> foo = {('a', 'b', 'c'): [1,2,3]}
>>> doc = (foo,foo)
>>>
>>> print yaml.dump(doc, default_flow_style=False)
!!python/tuple
- &id001
? !!python/tuple
- a
- b
- c
: - 1
- 2
- 3
- *id001
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4401 次 |
| 最近记录: |