我正在使用PyYAML library将json转换为yaml。但是引号在不应删除的情况下从字符串值中删除。只能从钥匙中将其删除。
我已将default_flow_style选项与yaml dump函数一起使用,如下所示:
import yaml
x = {'name':'Alice','location':'New York', 'profession':'coder'}
yaml.dump(x, default_flow_style=False)
实际结果是:
'location: New York\nname: Alice\nprofession: coder\n'
当所需结果为:
"location: 'New York'\nname: 'Alice'\nprofession: 'coder'\n"
答案 0 :(得分:1)
您正在使用的PyYAML库不会轻易为您提供
一种控制。如果您多余,它将删除原始报价
加载并转储YAML(版本1.1)。如果您指定
default_style='"'
每个字符串都被引用,包括键。
ruamel.yaml
(免责声明:我是该程序包的作者)可以执行此操作
往返,同时允许您保留特定的和/或
多余的报价。它的机制可以为您提供类型
您可以直接使用。
感谢 David Fraser 您还可以轻松地使用不带引号的映射键,而其余所有键都用双引号括起来:
import sys
import ruamel.yaml
def non_quoted_key(self, data):
if isinstance(data, ruamel.yaml.compat.string_types):
data = ruamel.yaml.scalarstring.PlainScalarString(data)
return self.represent_data(data)
x = {'name':'Alice', 'location':'New York', 'profession':'coder'}
yaml = ruamel.yaml.YAML()
yaml.default_flow_style = False
yaml.default_style = '"'
yaml.Representer.represent_key = non_quoted_key
yaml.dump(x, sys.stdout)
给出:
name: "Alice"
location: "New York"
profession: "coder"