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を読んでいます。これは私が必要とするものに近いですが、 引用符で囲まれた文字列などのカスタムタグ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