如何用ruamel.yaml导出含单引号字符串时去除多余双引号
问题:ruamel.yaml导出时如何给字符串添加单引号且避免多余双引号?
我需要给YAML中Type字段的值添加单引号,原始YAML字符串如下:
yaml_str = 'Type: modified'
但执行导出代码后,结果出现了不必要的双引号。我的代码如下:
import sys import ruamel.yaml yaml = ruamel.yaml.YAML() data = yaml.load(yaml_str) data['Type'] = f"'{data['Type']}'" yaml.dump(data, sys.stdout)
实际输出:
Type: "'modified'"
期望输出:
Type: 'modified'
我尝试过多种字符串格式化方式,也添加了yaml.preserve_quotes = True,但都没效果,求可行的解决办法?
解决办法
直接给data['Type']赋值带单引号的字符串时,ruamel.yaml会把整个内容(包括单引号)视为普通字符串内容,因此自动添加双引号包裹。要实现预期的单引号格式,需要使用ruamel.yaml提供的SingleQuotedScalarString类来创建带单引号的标量对象。
修改后的代码如下:
import sys import ruamel.yaml from ruamel.yaml.scalarstring import SingleQuotedScalarString yaml = ruamel.yaml.YAML() yaml_str = 'Type: modified' data = yaml.load(yaml_str) # 将值包装为单引号标量对象 data['Type'] = SingleQuotedScalarString(data['Type']) yaml.dump(data, sys.stdout)
执行这段代码后,就能得到期望的输出:Type: 'modified'。
如果需要其他引号格式,还可以使用ruamel.yaml.scalarstring模块中的DoubleQuotedScalarString(双引号)或LiteralScalarString(块级字面量)等类,按需选择即可。
内容的提问来源于stack exchange,提问作者yael
相关产品推荐
相关产品推荐

