You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ruamel.yaml.dump去除YAML输出中的单引号

解决ruamel.yaml转换字典时字符串带单引号的问题

问题描述

期望的YAML输出:

quickSearch:
        type: string
        maxLength: 250
        pattern: [a-zA-Z0-9.\-_\u4e00-\u9fa5]+

实际输出(正则字符串被自动添加单引号):

quickSearch:
        type: string
        maxLength: 250
        pattern: '[a-zA-Z0-9.\-_\u4e00-\u9fa5]+'

相关代码:

from ruamel.yaml import YAML
yaml = YAML()
param_dict = {
            "quickSearch": {
                "type": "string",
                "maxLength": 250,
                "pattern": "",
            }
        }
pattern = "[a-zA-Z0-9.\-_\\u4e00-\\u9fa5]+"
param_dict["quickSearch"]["pattern"] = pattern
with open("config.yaml", 'w', encoding='utf-8-sig') as f:
    yaml.dump(param_dict, f)

解决方案

ruamel.yaml会自动给包含YAML特殊元字符(如[]、+、\-)的字符串添加引号,避免解析歧义。要实现无引号输出,可通过以下两种方式处理:

方法一:针对特定字符串强制无引号输出

导入ruamel.yaml.scalarstring.PlainScalarString,将需要无引号展示的字符串包装为该类型,直接强制YAML以纯文本形式输出:

from ruamel.yaml import YAML
from ruamel.yaml.scalarstring import PlainScalarString

yaml = YAML()
param_dict = {
    "quickSearch": {
        "type": "string",
        "maxLength": 250,
        "pattern": "",
    }
}
pattern = "[a-zA-Z0-9.\-_\\u4e00-\\u9fa5]+"
# 用PlainScalarString包装字符串,消除自动添加的引号
param_dict["quickSearch"]["pattern"] = PlainScalarString(pattern)
with open("config.yaml", 'w', encoding='utf-8-sig') as f:
    yaml.dump(param_dict, f)

方法二:全局禁用自动引号

如果需要所有字符串都以无引号形式输出,可设置yaml.default_style为空字符串,全局统一字符串输出风格(注意:若字符串包含YAML语法冲突字符如:、换行符,可能导致解析错误,需确保所有字符串无此类字符):

from ruamel.yaml import YAML

yaml = YAML()
# 全局设置所有字符串使用无引号的纯文本风格
yaml.default_style = ''
param_dict = {
    "quickSearch": {
        "type": "string",
        "maxLength": 250,
        "pattern": "",
    }
}
pattern = "[a-zA-Z0-9.\-_\\u4e00-\\u9fa5]+"
param_dict["quickSearch"]["pattern"] = pattern
with open("config.yaml", 'w', encoding='utf-8-sig') as f:
    yaml.dump(param_dict, f)

内容的提问来源于stack exchange,提问作者user24271142

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:12:32