这是我的YAML文件(input.yaml
):
team_member:
name: Max
hobbies:
- Reading
team_leader:
name: Stuart
hobbies:
- dancing
我想编辑这个YAML文件,在关键的“爱好”中添加更多值,例如:
^{pr2}$我试图实现代码Anthon以适应我的情况,但它一点也没有帮助,因为YAML文件的缩进级别与我的不同。
示例:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
# yaml.preserve_quotes = True
with open('input.yaml') as fp:
data = yaml.load(fp)
for elem in data:
if elem['name'] == 'Stuart':
elem['hobbies'] = ['Fishing']
break # no need to iterate further
yaml.dump(data, sys.stdout)
我得到错误“TypeError('string index must be integers',)”,我知道这段代码可能完全错误,但我是新手拉梅尔亚姆勒. 在
如何编码?在
感谢您的代码运行正常,我必须按如下方式编辑此代码:
错误信息显示为第9行。指的是线
如果这还不能给你一个线索,我在这种情况下推荐的方法是开始添加一些
^{pr2}$print
函数,这样你就知道你在做什么了。for
循环如下所示:这个指纹
在抛出异常之前,我希望这会让你意识到你不是在列表的elements(项)上迭代,而是遍历dict的键(根据YAML中的根级映射构造)。与键相关联的值是具有键
name
和键hobbies
的对象。在然后用cd5}来处理{{cd5}中的值,然后用cd5}来处理{cd5}的值:
这样可以得到:
所以我们去掉了异常,但是结果并不是你想要的。键“hobients”的元素
dancing
不见了,因为您为该键指定了一个新的(list)值,而您应该做的是将一个项目附加到列表中。我们现在还可以取消打印功能:这将得到文件中最后一个序列中的两个项目。还有一些事情需要解决:
dancing
的大写不正确。若要更正此问题,请在只有一个元素时添加一行处理该列表Max
的代码(这就是为什么您需要去掉代码中的break
)最终代码如下:
这和你想要的很接近
¹前两行的备选方案:
for key, value in data.items()
相关问题 更多 >
编程相关推荐