使用 PyYAML.dump() 生成锚点?

2024-02-15

我希望能够在 PyYAML 的 dump() 函数生成的 YAML 中生成锚点。有没有办法做到这一点?理想情况下,锚点应与 YAML 节点具有相同的名称。

Example:

import yaml
yaml.dump({'a': [1,2,3]})
'a: [1, 2, 3]\n'

我希望能够生成 YAML,如下所示:

import yaml
yaml.dump({'a': [1,2,3]})
'a: &a [1, 2, 3]\n'

我可以编写自定义发射器或转储器来执行此操作吗?还有别的办法吗?


默认情况下,仅当检测到对先前看到的对象的引用时才会发出锚点:

>>> 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

如果您想覆盖它的命名方式,您必须自定义自卸车类 http://pyyaml.org/wiki/PyYAMLDocumentation#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PyYAML.dump() 生成锚点? 的相关文章

随机推荐