Para usuarios de Python, puedes probar pyyaml-include .
Instalar en pc
pip install pyyaml-include
Uso
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)
Considere que tenemos tales archivos YAML :
├── 0.yaml
└── include.d
├── 1.yaml
└── 2.yaml
name: "1"
name: "2"
Incluir archivos por nombre
En el nivel superior:
Si 0.yaml
fue:
!include include.d/1.yaml
Nosotros recibiremos:
{"name": "1"}
file1: !include include.d/1.yaml
file2: !include include.d/2.yaml
Nosotros recibiremos:
file1:
name: "1"
file2:
name: "2"
En secuencia:
Si 0.yaml
fue:
files:
- !include include.d/1.yaml
- !include include.d/2.yaml
Nosotros recibiremos:
files:
- name: "1"
- name: "2"
ℹ Nota :
El nombre del archivo puede ser absoluto (como /usr/conf/1.5/Make.yml
) o relativo (como ../../cfg/img.yml
).
Incluir archivos por comodines
El nombre del archivo puede contener comodines de estilo shell. Los datos cargados de los archivos encontrados por comodines se establecerán en una secuencia.
Si 0.yaml
fue:
files: !include include.d/*.yaml
Nosotros recibiremos:
files:
- name: "1"
- name: "2"
ℹ Nota :
- Por ejemplo
Python>=3.5
, si el recursive
argumento de la etiqueta !include
YAML es true
, el patrón “**”
coincidirá con cualquier archivo y cero o más directorios y subdirectorios.
- El uso del
“**”
patrón en grandes árboles de directorios puede consumir una cantidad excesiva de tiempo debido a la búsqueda recursiva.
Para habilitar el recursive
argumento, escribiremos la !include
etiqueta en Mapping
o Sequence
modo:
- Argumentos en
Sequence
modo:
!include [tests/data/include.d/**/*.yaml, true]
- Argumentos en
Mapping
modo:
!include {pathname: tests/data/include.d/**/*.yaml, recursive: true}