2
我想创建一个YAML过滤器读取YAML文件,处理它事后转储它。PyYAML:装载和卸载YAML文件并保留标签(CustomTag!)
必须解决所有的别名(即很好的工作已经开箱):
>>> yaml.dump(yaml.load("""
Foo: &bar
name: bar
Foo2:
<<: *bar
"""))
'Foo: {name: bar}\nFoo2: {name: bar}\n'
但它也应保留任何表达,如:
>>> yaml.dump(yaml.load("Name: !Foo bar "))
yaml.constructor.ConstructorError: could not determine a constructor for the tag '!Foo' in "<unicode string>", line 1, column 7:
Name: !Foo bar
^
我读pyYAML Errors on "!" in a string,这是接近我所需要的,但它分析和OUTP UTS的自定义标签为引用字符串,因此它不是一个标签了:
>>> def default_ctor(loader, tag_suffix, node):
... return tag_suffix + ' ' + node.value
>>> yaml.add_multi_constructor('', default_ctor)
>>> yaml.dump(yaml.load("Name: !Foo bar "), default_flow_style=False)
"Name: '!Foo bar'\n"
我想没有太多的缺失,但什么?我如何加载包含任何标签的文件并在之后转储它们?
使用'yaml.load()'是不安全的,因为如果有人可以控制YAML文件就可以执行任意代码,并且PyYAML不会警告其危险。 – Anthon