我有一个如下所示的 yaml 文件:
# The following key opens a door
key: value
有没有办法在维护评论的同时
load
和dump
这些数据?
如果你使用块结构的 YAML,你可以使用 python 包¹
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)
结果:
# example
name:
# details
family: Smith # very common
given: Bob # one of the siblings
注意行尾注释仍然对齐。
而不是普通的
list
和dict
code
由包装版本²组成,上面附有评论。
¹使用
pip install ruamel.yaml
安装。适用于 Python 2.6/2.7/3.3+
²
ordereddict
在映射的情况下使用,以保留顺序Scanner.scan_to_next_token
中)丢弃注释。Dump
ing(=发出)评论似乎更容易,并且在旧 PyYAML 错误跟踪器上的ticket 114 中进行了讨论。
截至 2023 年,关于添加对加载评论的支持的功能请求仍然停滞不前。
我有一个 pyyaml 的分支就是这样做的。 https://github.com/pflarr/pyyaml
如果您不受文件模式的约束,您可以选择一个特定的键模式来表示“忽略的条目”。例如 - 您的 yaml 数据摄取逻辑可以过滤掉任何具有以“~”开头的键的条目:
company:
~name: Must be the legal name
name: Curious Adventures
~address: the official correspondence address
address: 1234, New York, PO 1234