如何用 ruamel.yaml 抑制字符串的自动引用

How to suppress automatic quoting of strings with ruamel.yaml

我正在使用 ruamel.yaml 为构建工具生成 "recipes",它接受非标准的 yaml 超集。我得到了一些不需要的输出,我对如何禁用它的搜索已经枯竭。这是一个例子:

import ruamel.yaml as ryaml

test = ryaml.comments.CommentedMap(requirements={'host': ['abc', 'def   # [something]']})
print(ryaml.dump(test, Dumper=ryaml.RoundTripDumper,
                                            default_flow_style=False,
                                            default_style="",
                                            width=200))

这会自动引用无效的 yaml(老实说这是非常正常的默认行为):

requirements:
  host:
    - abc
    - 'def   # [something]'

我真的需要它不要在非标准行周围添加那些单引号。我不希望 ruamel 能够将它解析回来,只是转储它。

您想要一个普通标量,但该标量中的 #(白色space 后跟一个散列)可以解释为注释。因此,需要引用该标量才能正确表示。如果您有 :(冒号 + 白色 space),也会发生同样的情况。

您唯一能做的就是将值更改为例如'def _# [something]'

对普通标量的限制是 clearly documented in the specification

(您当然可以使用 ruamel.yaml 生成注释 YAML,如果这是您的意图。但是您 不能 通过简单地在值中包含注释来做到这一点:无法将其与包含字符 space+hash)

的实际值区分开来