pyyaml safe_load:如何忽略本地标签

Jas*_*n S 8 python yaml pyyaml

我正在使用yaml.safe_load()但我需要忽略标签!v2- 有没有办法做到这一点但仍然使用safe_load()

Jas*_*n S 7

我想通了,它与How can I add a python tuple to a YAML file using pyYAML有关?

我只需要这样做:

  • 子类 yaml.SafeLoader
  • 调用add_constructor分配!v2给自定义构造方法
  • 在自定义构造方法中,做任何适当的事情
  • 使用yaml.load(..., MyLoaderClass)代替yaml.safe_load(...)

它有效。

class V2Loader(yaml.SafeLoader):
    def let_v2_through(self, node):
        return self.construct_mapping(node)
V2Loader.add_constructor(
    u'!v2',
    V2Loader.let_v2_through)

   ....

y = yaml.load(info, Loader=V2Loader)
Run Code Online (Sandbox Code Playgroud)


小智 6

扩展现有答案以支持忽略所有未知标签。

import yaml

class SafeLoaderIgnoreUnknown(yaml.SafeLoader):
    def ignore_unknown(self, node):
        return None 

SafeLoaderIgnoreUnknown.add_constructor(None, SafeLoaderIgnoreUnknown.ignore_unknown)

root = yaml.load(content, Loader=SafeLoaderIgnoreUnknown)
Run Code Online (Sandbox Code Playgroud)