在 ruamel 中,如何像任何其他字符串一样以“*”开头且不带引号的字符串

In ruamel how to start a string with '*' with no quotes like any other string

yaml =  ruamel.yaml.YAML()
yaml.indent(mapping=4)
test_yaml_file = open("test.yaml") 
test_file = yaml.load(test_yaml_file)
# test = LiteralScalarString('*clvm')
test = "*testing"
test_file['test_perf'] = test
with open("test.yaml", 'w') as changed_file:
    yaml.dump(test_file, changed_file)

在此预期输出是

test_perf: *testing

但输出已经

test_perf: '*testing'

如何使用 ruamel 实现此目的?

您的标量以 * 开头,它在 YAML 中用于指示 alias node。为了防止 *testing 在加载期间被解释为别名(即使文档中未指定相应的锚点(&testing)),标量必须被引用或表示为文字或折叠块标量.

因此,除了选择将标量表示为文字或折叠块标量(您没有得到引号,但确实得到 | resp. >)

您不必担心这些引号,因为加载后您将再次拥有字符串 *testing 而不是突然有额外(不需要的)引号的东西。

在 YAML 中还有其他具有特殊含义的字符(&! 等),当在标量的开头指示时会导致标量被引用。转储例程实际做的是转储字符串并读回,如果这导致不同的值,转储器知道需要引用。这也适用于像 2022-01-28 这样的字符串,当回读时会产生一个日期,这样的字符串在转储时也会自动引用(对于看起来像浮点数、整数、true/false 值的字符串也是如此)。