如何在 PyYAML dump() 期间获得一致的引号?
How to get consistent quotes during PyYAML dump()?
我想使用 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')
我想使用 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')