Пользователи Python могут попробовать pyyaml-include.
Установить
pip install pyyaml-include
использование
import yaml
from yamlinclude import YamlIncludeConstructor
YamlIncludeConstructor.add_to_loader_class(loader_class=yaml.FullLoader, base_dir='/your/conf/dir')
with open('0.yaml') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
print(data)
Допустим, у нас есть такие файлы YAML:
├── 0.yaml
└── include.d
├── 1.yaml
└── 2.yaml
name: "1"
name: "2"
Включать файлы по имени
На верхнем уровне:
Если 0.yaml
был:
!include include.d/1.yaml
Получим:
{"name": "1"}
В отображении:
Если 0.yaml
был:
file1: !include include.d/1.yaml
file2: !include include.d/2.yaml
Получим:
file1:
name: "1"
file2:
name: "2"
В последовательности:
Если 0.yaml
был:
files:
- !include include.d/1.yaml
- !include include.d/2.yaml
Получим:
files:
- name: "1"
- name: "2"
ℹ Примечание:
Имя файла может быть абсолютным (например, /usr/conf/1.5/Make.yml
) или относительным (например, ../../cfg/img.yml
).
Включать файлы с помощью подстановочных знаков
Имя файла может содержать подстановочные знаки в стиле оболочки. Данные, загруженные из файла (ов), найденного с помощью подстановочных знаков, будут установлены в последовательности.
Если 0.yaml
был:
files: !include include.d/*.yaml
Получим:
files:
- name: "1"
- name: "2"
ℹ Примечание:
- Для
Python>=3.5
, если recursive
аргумент тега !include
YAML равен true
, шаблон “**”
будет соответствовать любым файлам и ноль или более каталогов и подкаталоги.
- Использование шаблона
“**”
в больших деревьях каталогов может занять чрезмерно много времени из-за рекурсивного поиска.
Чтобы включить аргумент recursive
, мы напишем тег !include
в режиме Mapping
или Sequence
:
- Аргументы в режиме
Sequence
:
!include [tests/data/include.d/**/*.yaml, true]
- Аргументы в
Mapping
режиме:
!include {pathname: tests/data/include.d/**/*.yaml, recursive: true}
person
xqliang
schedule
02.04.2019