我想用PyYAML(使用yaml.dump()
)转储字典到yaml文件。字典看起来像这样:
{'releases':
{'release1': {'name': 'release1, 'version': '1.0.0', 'sha1': 'sha1'},
{'release2': {'name': 'release2', 'version': '20', 'sha1': 'sha1'},
{'release3': {'name': 'release3', 'version': '3.0', 'sha1': 'sha1'},
...
版本号可以是任何格式。例如1.0、2.0.1、30、v4、…
在转储过程中,PyYAML为可以解释为float或int的值添加单引号。这是有道理的,似乎是有意为之。然而,这使得最终的yaml文件看起来非常不一致(无论如何它是有效的):
releases:
release1:
name: release1
sha1: sha1
version: 1.0.0
release2:
name: release2
sha1: sha1
version: '20'
release3:
name: release3
sha1: sha1
version: '3.0'
...
是否有一种方法强制所有版本号的引号?
我尝试使用default_flow_style
,但它不工作或添加引号键和值,我不想要。
如果你想控制PyYAML如何序列化值,你需要一个自定义的序列化器,例如
class SingleQuoted(str):
pass
def represent_single_quoted(dumper, data):
return dumper.represent_scalar(BaseResolver.DEFAULT_SCALAR_TAG,
data, style="'")
yaml.add_representer(SingleQuoted, represent_single_quoted)
如果你有,你可以强制任何值序列化为单引号,用SingleQuoted
包裹它,例如
SingleQuoted('1.0.0')