擅长:python、mysql、java
<p>与@flix comment相反,在YAML中,不需要在标记后面加单引号或双引号(或块标量)。您可以尝试Oren Ben Kiki的<a href="http://ben-kiki.org/ypaste/cgi-bin/ypaste.pl" rel="nofollow noreferrer">reference parser</a>(以编程方式从YAML规范派生)来确认您的预期输出是有效的YAML</p>
<p>在Python中,空内容通常作为<code>None</code>加载(由过时的PyYAML和ruamel.yaml加载)。带标签的空内容当然只能指示特定实例的存在,而没有任何值指示</p>
<p>ruamel.yaml完全可以往返于您的预期输出:</p>
<pre><code>import sys
from ruamel.yaml import YAML
yaml_str = """\
10.1.1.16:
text: '1470814.27'
confidence: !anything
"""
yaml = YAML()
data = yaml.load(yaml_str)
yaml.dump(data, sys.stdout)
</code></pre>
<p>给出:</p>
<pre><code>10.1.1.16:
text: '1470814.27'
confidence: !anything
</code></pre>
<p>您可以生成一个只转储标记的对象,而不必从头开始添加值(就像解析器所做的那样),但是如果您不想深入了解细节,您可以加载标记的对象并将其添加到数据结构中:</p>
<pre><code>import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
def tagged_empty_scalar(tag):
return yaml.load('!' + tag)
data = {'10.1.1.16': dict(text='1470814.27', confidence=tagged_empty_scalar('anything'))}
yaml.dump(data, sys.stdout)
</code></pre>
<p>您可以在PyYAML中得到完全相同的结果,并且不使用引号,但这更复杂</p>