我知道这与this SO question有关,但我最关心的是这是否会影响诸如保留的注释之类的事情。在
import ruamel.yaml as yaml
yaml_str = """\
first_name: Art
occupation: Architect # This is an occupation comment
about: Art Vandelay is a fictional character that George invents...
"""
data = yaml.load(yaml_str, Loader=yaml.RoundTripLoader)
# I'd like to extend CommentedMap so that I can do something like:
data.insert(1, 'last_name', 'Vandelay')
print(yaml.dump(data, Dumper=yaml.RoundTripDumper))
应输出:
^{pr2}$
应不输出:
first_name: Art
last_name: Vandelay # This is an occupation comment
occupation: Architect
about: Art Vandelay is a fictional character that George invents...
在Python2.7和Python3.X上,至少拉梅尔亚姆勒0.11.11,这很好:
给出:
^{pr2}$因为行尾注释与
CommentedMap
中的行的键相关联。(在Linux Mint上使用Python 2.7.11拉梅尔亚姆勒0.11.10.)这在旧版本的上不起作用拉梅尔亚姆勒使用Python3作为
.insert()
是成熟的ruamel.ordereddict
的一个特性,而标准库中的OrderedDict没有这种方法。因此,您需要将.insert()
函数移植到CommentedMap
上:在Python3上给出:
请注意,
insert()
有一个可选参数,允许您为新插入的键值对指定注释。上面的操作是因为从CommentedMap
中删除一个键并不会删除与该键相关联的注释。所以我临时将旧的键值对存放在od
复制并在后面插入新的值上面的
insert
,带注释,已添加到拉梅尔亚姆勒0.11.11用于 Python 2和Python 3.round_trip_load()
相当于.load(...., Loader=ruamel.yaml.RoundTripLoader, ...)
,而{相关问题 更多 >
编程相关推荐