Har*_*mbe 47 python yaml pyyaml
我有一个yaml文件,如下所示:
# The following key opens a door
key: value
Run Code Online (Sandbox Code Playgroud)
在保持评论的同时,我是否有办法load和dump这些数据?
Ant*_*hon 82
如果你使用的是块结构化的YAML,你可以使用python包¹ruamel.yaml,这是PyYAML的衍生物,支持往返保存注释:
import sys
import ruamel.yaml
yaml_str = """\
# example
name:
# details
family: Smith # very common
given: Alice # one of the siblings
"""
yaml = ruamel.yaml.YAML() # defaults to round-trip if no parameters given
code = yaml.load(yaml_str)
code['name']['given'] = 'Bob'
yaml.dump(code, sys.stdout)
Run Code Online (Sandbox Code Playgroud)
结果:
# example
name:
# details
family: Smith # very common
given: Bob # one of the siblings
Run Code Online (Sandbox Code Playgroud)
请注意,行尾注释仍然是对齐的.
而不是普通的list和dict对象code组成的评论所附的包装版本².
¹ 安装pip install ruamel.yaml.在映射的情况下使用Python 2.6/2.7/3.3 +
² ,以保持排序 ordereddict
小智 5
我有一个 pyyaml 分支正是这样做的。 https://github.com/pflarr/pyyaml
要构建带有注释的 yaml 文件,您必须创建一个包含注释事件的事件流。目前仅允许在序列项和映射键之前添加注释。
目前这只适用于 python3,我还没有将其移植到库的 python2 版本,但可以根据要求轻松执行此操作。此外,这也应该很容易移植到 C libyaml,因为无论如何 python 代码都是一个简单的移植。