<p>如果您想先加载,然后转储(可能在修改一些值之后),PyYAML不是合适的工具,因为它会破坏语法表示中的许多内容。你知道吗</p>
<p>它将删除您注意到的流样式,但也会删除注释、锚定/别名、特定整数格式(八进制、十六进制、二进制)等</p>
<p>在PyYAML中,对输出的flow-vs-block样式几乎没有控制。您可以将所有块;节点集合作为流,<br/>
您可以使用<code>default_flow_style</code>参数<code>safe_dump()</code>来拥有所有流。你知道吗</p>
<p>最好使用<code>ruamel.yaml</code>(免责声明:我是该库的作者),因为它支持已有10年历史的yaml1.2标准(其中PyYAML只处理过时的yaml1.1),并且可以获得更接近于YAML输入的输出。你知道吗</p>
<pre><code>from ruamel.yaml import YAML
yaml = YAML()
with open(system_bsc_path) as f:
system_bsc_dict = yaml.load(f)
with open(system_bsc_path, "w") as f:
yaml.dump(system_bsc_dict, f)
</code></pre>
<p>如果您是Python 3,则可以使用:</p>
<pre><code>from pathlib import Path
yaml_file = Path(system_bsc_path)
system_bsc_dict = yaml.load(yaml_file)
yaml.dump(system_bsc_dict, yaml_file)
</code></pre>
<p>默认情况下,任何<em>新的</em>列表(和dict)都将是块样式,如果要添加流样式列表,则可以使用<code>yaml.default_flow_style = True</code>设置所有这些列表,或者通过在特殊内部表示上设置流属性(<code>.fa</code>)来使用精细控制:</p>
<pre><code>def FSlist(l): # concert list into flow-style (default is block style)
from ruamel.yaml.comments import CommentedSeq
cs = CommentedSeq(l)
cs.fa.set_flow_style()
return cs
system_bsc_dict['existing_field'] = FSlist(["Boston Maestro 4000"])
</code></pre>