Вы, кажется, думаете, что это:
!Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]
- простой скаляр, который загружается как строка в Python. Это не.
обычный скаляр не может начинаться с восклицательного знака, так как YAML использует это
вводит тег ,
и то, что вы загружаете оттуда, является довольно сложным объектом:
import ruamel.yaml
yaml = ruamel.yaml.YAML()
data = yaml.load("!Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]")
print(data)
печать:
['', ['abc:def:', <ruamel.yaml.comments.TaggedScalar object at 0x7f405265fa58>, ':', '123', ':tty:*']]
Вы можете создавать такие объекты с нуля, но, вероятно, их проще загружать
элемент списка, который вы хотите добавить, из его строкового представления YAML. Если вы хотите заняться каким-либо делом, вы
может также создать запись из экземпляров CommentedSeq
и TaggedScalar
:
import sys
from ruamel.yaml import YAML
from ruamel.yaml.comments import CommentedSeq as cs
from ruamel.yaml.comments import TaggedScalar as ts
from ruamel.yaml.scalarstring import SingleQuotedScalarString as sq
yaml_doc = """\
Condition:
Like:
- !Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]
"""
yaml = YAML()
yaml.preserve_quotes = True
yaml.width = 4096
data = yaml.load(yaml_doc)
ref = data['Condition']['Like']
new_member = yaml.load("!Join ['',['abc:def:', !Ref 'XYZ::Rert', ':', '456', ':tty:*']]")
ts1 = ts()
ts1.value = 'XYZ::Rert'
ts1.style = "'"
ts1.yaml_set_tag('!Ref')
new_member2 = cs([sq(''), [sq('abc:def:'), ts1 , sq(':'), sq('789'), sq(':tty:*')]])
new_member2.yaml_set_tag('!Join')
new_member2.fa.set_flow_style()
ref.append(new_member)
ref.append(new_member2)
yaml.dump(data, sys.stdout)
, что дает:
Condition:
Like:
- !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '123', ':tty:*']]
- !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '456', ':tty:*']]
- !Join ['', ['abc:def:', !Ref 'XYZ::Rert', ':', '789', ':tty:*']]
(Если вы действительно хотите понять, как создать что-то вроде new_member2
, это поможет
загрузить нужный вывод из YAML и распечатать отдельные элементы, их типы и
их атрибуты)