【问题标题】:How to add a node with ruamel.yaml如何使用 ruamel.yaml 添加节点
【发布时间】:2017-01-15 18:35:12
【问题描述】:

我尝试在example 之后添加一个新节点,但是:

myitems = ruamel.yaml.load(inp, ruamel.yaml.RoundTripLoader)
myitems['abc'].append('test')

给我一​​个错误:

Traceback (most recent call last):
  File "item_updater.py", line 148, in <module>
    myitems['wohnung'].append('test')
AttributeError: 'CommentedMap' object has no attribute 'append'

我正在使用 ruamel.yaml v0.13.7

我做错了什么?

【问题讨论】:

  • 您确定使用的是 0.8 版吗?
  • 0.8 版是什么?
  • 我使用的是 ruamel.yaml v0.13.7(即最新版本)

标签: python pyyaml ruamel.yaml


【解决方案1】:

您的错误并非来自您指出的示例,因为在示例的inp 中没有出现在您的错误中的wohnung

您可能在某处忘记了-

wohnung:
   a: 1

代替:

wohnung:
- a: 1

只有在后者你可以使用myitems['wohnung'].append('test')追加。

该示例有效,但如果不显示您的真实 YAML 输入,则很难看出错误的确切原因是什么。

【讨论】:

  • 好吧,读了那个例子,我的印象不仅是data['abc'].append('b')会起作用,而且data['xyz'].append('b')也会起作用。
  • 该 YAML 文件的顶层是一个映射。它的键“abc”的值是一个序列。它作为list 的子类加载到Python 中(第一个元素是'a')。顶层的键xyz 的值又是一个映射。这将作为dict 的子类加载(带有键/值对('a', 1)('b', 2) 等)您可以附加到list,但不能附加到dict
  • 好的,明白了。感谢您的澄清。 - 一般来说,我在理解 python 中 yaml 实现的细节时有些困难。 PyYAML 和 ruamel.yaml 没有详细记录。
  • @msinn WRT ruamel.yaml 的文档,你是对的,如果有想过的话,这通常是事后才想到的。请随时在Stack Overflow 上询问以进行澄清,但请确保包含您的确切输入(最小化)。这就是为什么我“抱怨”不清楚“wohnung”来自哪里。
猜你喜欢
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 2021-10-10
  • 2019-01-28
相关资源
最近更新 更多