ruamel.yaml
はタグを処理できないと誤解されています。
import ruamel.yaml
yaml_str = """\
Properties:
MinSize: !Ref ClusterSize
MaxSize: !Ref ClusterSize
"""
class Blob(object):
def update(self, value):
self.value = value
def __str__(self):
return str(self.value)
def my_constructor(self, node):
data = Blob()
yield data
value = self.construct_scalar(node)
data.update(value)
ruamel.yaml.SafeLoader.add_constructor(u'!Ref', my_constructor)
data = ruamel.yaml.safe_load(yaml_str)
print('data', data['Properties']['MinSize'])
プリント:
ClusterSize
したい場合しかし、あなたはどんな未知のタグを処理する方法に関する情報を提供する必要があり、もちろん、それはあなたが!Ref
にロードするデータの種類を推測することはできません多くの異なるタグを取り除くために、そして「すべてが文字列であること」を気にしないあなたも行うことができます与える
import ruamel.yaml
yaml_str = """\
Properties:
MinSize: !Ref ClusterSize
MaxSize: !Ref ClusterSize
SizeList:
- !abc 1
- !xyz 3
"""
def general_constructor(loader, tag_suffix, node):
return node.value
ruamel.yaml.SafeLoader.add_multi_constructor(u'!', general_constructor)
data = ruamel.yaml.safe_load(yaml_str)
print(data)
:
{'Properties': {'SizeList': ['1', '3'], 'MinSize': 'ClusterSize', 'MaxSize': 'ClusterSize'}}
(スカラー1
と3
はなく、通常の整数の文字列として読み込まれていることに注意してください)
「出力」と「資源」は何ですか? – Anthon