python3 получить вложенный словарь / свойство из файла yaml - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь выяснить, как получить вложенные данные в виде словаря / свойства из файла yaml.

Приведенный ниже код работает, если я предоставляю функции только один уровень.пример:

result = parse_yaml_file(config_yaml_file, 'section')

, но не удается, если я пытаюсь что-то вроде:

result = parse_yaml_file(yaml_file, 'section.sub-section')

или

result = parse_yaml_file(yaml_file, '[\'section\'][\'sub-section\']')

код python3:

def parse_yaml_file(yml_file, section):
    print('section : ' + section)
    data_dict = {}
    try:
        with open(yml_file) as f:
            data_dict = (yaml.load(f))
    except (FileNotFoundError, IOError):
        exit_with_error('Issue finding/opening ' + yml_file)

    if not section:
        return data_dict
    else: 
        return data_dict.get(section)

result = parse_yaml_file(yaml_file, 'section.sub-section.property')
print(json.dumps(result, indent=4))

Можно ли анализировать только часть / раздел файла yaml?Или просто получить один подраздел / свойство из проанализированного результата?

Я знаю, что могу получить его из словаря, например:

data_dict['section']['sub-section']['property']

, но я хочу, чтобы он был гибким, а нежестко закодированы, поскольку данные для захвата предоставляются в качестве аргумента функции.

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете попробовать использовать библиотеку для поиска разобранного файла yaml, например, dpath

https://pypi.org/project/dpath/


import yaml
import dpath.util


def parse_yaml(yml_file, section):
    with open(yml_file,'r') as f:
        data_dict = yaml.load(f)
        return  dpath.util.search(data_dict,section)


parse_yaml('file.yml','section/sub-section')

...