簡體   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