【问题标题】:Iterate Through YAML objects遍历 YAML 对象
【发布时间】:2020-10-26 14:59:31
【问题描述】:

我有 yml 文件

- 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 print ip1 和 ip2 的 vuls

尝试查看示例并获得以下代码

import yaml
f = open('file.yml')
yaml_file = yaml.safe_load(f)
for entry in yaml_file["id"]:
    print yaml_file[id]["ip"])

但它不起作用

知道如何修复这个 python 谢谢

【问题讨论】:

  • yaml_file["id"] 不是您文件中的条目...它是列表中每个对象的子元素
  • 你怎么知道它不起作用?请参阅How to Ask 以及如何创建minimal reproducible example,并编辑问题。

标签: python yaml


【解决方案1】:

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

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'])

结果:

{'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

【讨论】:

    【解决方案2】:

    一旦yaml_file = yaml.safe_load(f)yaml_file 的数据类型是list
    您所要做的就是像这样迭代它:

    for entry in yaml_file:
       print(entry['instance']['ip'])
    

    【讨论】:

      猜你喜欢
      • 2023-01-05
      • 2019-08-04
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 2015-01-11
      相关资源
      最近更新 更多