#python-3.x #dictionary #properties #nested
#python-3.x #словарь #свойства #вложенный
Вопрос:
Я пытаюсь выяснить, как получить вложенные данные в виде словаря / свойства из файла 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:
Вы могли бы попробовать использовать библиотеку для поиска в проанализированном файле 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')
Комментарии:
1. Захватите код для свойства и сохраните древовидную структуру. Если вы предпочитаете запускать дерево в данном разделе, используйте get, а не search, и все. Еще раз спасибо.