YAML 파일을 읽고 처리 한 후 나중에 덤프하는 YAML 필터를 만들고 싶습니다.PyYAML : yaml 파일로드 및 덤프 (! CustomTag)
이 (상자 밖으로 잘 이미 작동) 어떤 별칭을 해결해야합니다 :
>>> yaml.dump(yaml.load("""
Foo: &bar
name: bar
Foo2:
<<: *bar
"""))
'Foo: {name: bar}\nFoo2: {name: bar}\n'
을 그러나 그것은 또한 처럼!CustomTag: foo
표현의 모든 종류를 유지해야한다 :
>>> 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