如何使用ruamel.yaml禁止自动引用字符串

时间:2018-07-15 21:22:10

标签: yaml ruamel.yaml

我正在使用ruamel.yaml为生成工具生成“配方”,该工具接受yaml的非标准超集。我得到了一些不良的输出,而我对于如何禁用此输出的搜索却干dry了。这是一个示例:

  <center><button type="button">Generate!</button></center>
  <center><h3 id="pin"><font face="Verdana" color="white">####</font></h3></center>
  <script>
    document.querySelector('button').addEventListener('click', () => {
        const random = Math.random();
        const pin = Math.round(random * 9999);
        document.getElementById("pin").innerHTML = new String("0000" + pin).slice(-4);
    });
  </script>

这会自动引用无效的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))

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

1 个答案:

答案 0 :(得分:1)

您想要一个普通的标量,但是该标量内的#(空格后跟一个哈希)可以解释为注释。因此,必须引用该标量才能正确表示。如果您使用:(冒号+空格),也会发生同样的情况。

您唯一可以做的就是将值更改为'def _# [something]'

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

(如果您打算这样做,当然可以使用ruamel.yaml生成带注释的YAML。但是,您不能通过简单地在值中包含注释来做到这一点:这是不可能的以便将其与包含字符space + hash的实际值区分开来