从YAML文件返回所有列表及其内容

2024-09-29 23:15:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为列表编写自定义yaml lint规则。但是,我不知道如何仅从文件中获取列表

例如,如果我有以下文件:

变量1.yaml:

---
list1:
  - list1value1
  - list1value2
  - list1value3
string1: this_is_a_string
bool1: true
list2:
  - list2value1
  - list2value2
  - list2value3

变量2.yaml:

---
dict1:
  dict1list1:
    - dict1list1value1
    - dict1list1value2
  dict1bool1: false
bool2: true
list3:
  - list3value1
  - list3value2
  - list3value3
list4:
  - list4value1
  - list4value2

那么我想要的是:

>>> for name, values in get_lists_from_yaml_file("variable1.yaml"):
    print(name: values)

list1: ['list1value1', 'list1value2', 'list1value3']
list2: ['list2value1', 'list2value2', 'list2value3']

>>> for name, values in get_lists_from_yaml_file("variables2.yaml"):
    print(name: values)

dict1list1: ['dict1list1value1', 'dict1list1value2']
list3: ['list3value1', 'list3value2', 'list3value3']
list4: ['list4value1', 'list4value2']

额外的好东西:声明列表的行号


Tags: nametrueyaml列表valueslist2list1list2value2
1条回答
网友
1楼 · 发布于 2024-09-29 23:15:42

一旦加载了yaml,我们就有了一个python dict。我们迭代dict项并检查哪个值是列表

试试下面的方法

import yaml

with open('variables1.yaml') as f:
    data = yaml.load(f, Loader=yaml.FullLoader)
    for k, v in data.items():
        if isinstance(v, list):
            print(f'{k}  > {v}')

输出

list1  > ['list1value1', 'list1value2', 'list1value3']
list2  > ['list2value1', 'list2value2', 'list2value3']

相关问题 更多 >

    热门问题