繁体   English   中英

python迭代yaml并过滤结果

[英]python iterate yaml and filter result

我有这个 yaml 文件

data:
  - name: acme_aws1
    source: aws
    path: acme/acme_aws1.zip
  - name: acme_gke1
    source: gke
    path: acme/acme_gke1.zip
  - name: acme_oci
    source: oci
    path: acme/acme_oci1.zip
  - name: acme_aws2
    source: aws
    path: acme/acme_aws2.zip
  - name: acme_gke2
    source: gke
    path: acme/acme_gke2.zip
  - name: acme_oci2
    source: oci
    path: acme/acme_oci2.zip

我想过滤掉包含“source=gke”的数据,然后循环将路径的值分配给变量。任何人都可以分享使用 python 和 pyyaml 作为导入模块时的操作方法。

这段代码会做你需要的,它只是读取,并使用filter标准 function 返回一个迭代器,其中的元素传递一个条件。 然后将这些元素放入一个新列表中

import yaml

# for files you can use
# with open("data.yaml", "r") as file:
#     yaml_data = yaml.safe_load(file)

yaml_data = yaml.safe_load("""
data:
- name: acme_aws1
  source: aws
  path: acme/acme_aws1.zip
- name: acme_gke1
  source: gke
  path: acme/acme_gke1.zip
- name: acme_oci
  source: oci
  path: acme/acme_oci1.zip
- name: acme_aws2
  source: aws
  path: acme/acme_aws2.zip
- name: acme_gke2
  source: gke
  path: acme/acme_gke2.zip
- name: acme_oci2
  source: oci
  path: acme/acme_oci2.zip
""")

data = yaml_data['data']
filtered = list(filter(lambda x: x.get('source') == 'gke', data))
print(filtered)

它打印

[{'name': 'acme_gke1', 'source': 'gke', 'path': 'acme/acme_gke1.zip'}, {'name': 'acme_gke2', 'source': 'gke', 'path ': 'acme/acme_gke2.zip'}]

import yaml # Read the file. content = yaml.safe_load('your_file.yaml') # Get rid of 'gke' elements. not_gke_sources = [block for block in content if block.source != 'gke'] # Iterate over to access all 'path's. for block in not_gke_sources: path = block.path # Some actions.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM