首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历YAML对象

遍历YAML对象
EN

Stack Overflow用户
提问于 2020-10-26 14:59:31
回答 2查看 1.4K关注 0票数 0

我有yml文件

代码语言:javascript
复制
- id: id1
  memberPort: 8080
  instance:
    name: test
    id: q1
    site: us
    dns: dns1
    ip: 1p2
    state: available
- id: id2
  memberPort: 8080
  instance:
    name: test2
    id: q2
    site: us
    dns: dns2
    ip: ip1
    state: available

我想通过这个迭代得到ip打印ip1和ip2的vauls

试着看看这些例子,得到了下面的代码

代码语言:javascript
复制
import yaml
f = open('file.yml')
yaml_file = yaml.safe_load(f)
for entry in yaml_file["id"]:
    print yaml_file[id]["ip"])

但这不起作用

知道怎么修复这条蟒蛇吗谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-26 15:06:33

您将阅读和迭代条目与评估条目混为一谈。将两者分开,如下所示:

代码语言:javascript
复制
import yaml
f = open('/tmp/test.yaml')
yaml_file = yaml.safe_load(f)
for entry in yaml_file:
    print(entry)
    print("ID: " + entry['id'])
    print("IP: " + entry['instance']['ip'])

结果:

代码语言:javascript
复制
{'id': 'id1', 'memberPort': 8080, 'instance': {'name': 'test', 'id': 'q1', 'site': 'us', 'dns': 'dns1', 'ip': '1p2', 'state': 'available'}}
ID: id1
IP: 1p2
{'id': 'id2', 'memberPort': 8080, 'instance': {'name': 'test2', 'id': 'q2', 'site': 'us', 'dns': 'dns2', 'ip': 'ip1', 'state': 'available'}}
ID: id2
IP: ip1
票数 0
EN

Stack Overflow用户

发布于 2020-10-26 15:10:24

一旦行yaml_file = yaml.safe_load(f)yaml_file的数据类型就是list

您所要做的就是迭代它,就像:

代码语言:javascript
复制
for entry in yaml_file:
   print(entry['instance']['ip'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64539628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档