如何在ruamel中访问YAML值中标量的样式信息?
访问ruamel.yaml加载后标量的样式信息
ruamel.yaml开启preserve_quotes=True后,不会把带格式的标量(比如带双引号的字符串)转成普通Python字符串,而是用专属的ScalarString子类实例存储,以此保留原有的格式信息。要在internal_dictionary阶段访问样式信息,直接操作对应值的属性即可:
- 获取字典中目标键对应的值,它会是以下类型之一:
DoubleQuotedScalarString:对应双引号包裹的标量SingleQuotedScalarString:对应单引号包裹的标量PlainScalarString:对应无引号的普通标量
- 通过实例的
style属性可直接获取样式标记:双引号对应'"',单引号对应"',无引号标量的style为None - 也可通过
isinstance()判断具体类型,来区分不同的标量样式
示例代码
from ruamel.yaml import YAML, DoubleQuotedScalarString yaml = YAML(pure=True) yaml.preserve_quotes = True # 加载带双引号的YAML内容 internal_dictionary = yaml.load("Key: \"value\"") # 获取标量对象 scalar_val = internal_dictionary["Key"] # 打印样式标记 print(scalar_val.style) # 输出结果: " # 判断是否为双引号标量实例 print(isinstance(scalar_val, DoubleQuotedScalarString)) # 输出结果: True
注意:你提供的原代码存在一处错误,
yaml.dump(code, sys.stdout)需修改为yaml.dump(internal_dictionary, sys.stdout),否则会因变量未定义报错。
内容的提问来源于stack exchange,提问作者Omnia Vanitas
相关产品推荐
相关产品推荐

