Python:
Travailler avec YAML

Comment faire :

Lire et écrire du YAML en Python implique généralement l’utilisation d’une bibliothèque tierce, PyYAML étant la plus populaire. Pour commencer, vous devrez installer PyYAML en exécutant pip install PyYAML.

Exemple : Écrire dans un fichier YAML

import yaml

data = {'une liste': [1, 42, 3.141, 1337, 'aide', u'€'],
        'une chaîne': 'boo!',
        'un autre dictionnaire': {'foo': 'bar', 'clé': 'valeur', 'la réponse': 42}}

with open('exemple.yaml', 'w') as f:
    yaml.dump(data, f, default_flow_style=False)

# Ceci crée `exemple.yaml` avec les données structurées au format YAML.

Exemple : Lire à partir d’un fichier YAML

import yaml

with open('exemple.yaml', 'r') as f:
    data_loaded = yaml.safe_load(f)

print(data_loaded)

# Sortie : 
# {'une liste': [1, 42, 3.141, 1337, 'aide', '€'],
#  'une chaîne': 'boo!',
#  'un autre dictionnaire': {'foo': 'bar', 'clé': 'valeur', 'la réponse': 42}}

Utiliser YAML pour la Configuration

De nombreux programmeurs utilisent YAML pour gérer les configurations d’applications. Voici un exemple de la manière dont on pourrait structurer un fichier de configuration et le lire :

config.yaml :

base_de_données:
  hôte: localhost
  port: 5432
  nom_utilisateur: admin
  mot_de_passe: secret

Lire le fichier de configuration en Python :

import yaml

with open('config.yaml', 'r') as f:
    config = yaml.safe_load(f)

print(config['base_de_données']['hôte'])  # Sortie : localhost

Gérer les Structures Complexes

Pour les structures complexes, PyYAML vous permet de définir des objets Python personnalisés. Cependant, assurez-vous d’utiliser des pratiques sûres en utilisant safe_load pour éviter d’exécuter des fonctions ou des objets arbitraires.

import yaml

# Définir un objet Python
class Exemple:
    def __init__(self, valeur):
        self.valeur = valeur

# Constructeur personnalisé
def constructeur_exemple(loader, node):
    valeur = loader.construct_scalar(node)
    return Exemple(valeur)

# Ajouter un constructeur pour l'étiquette "!exemple"
yaml.add_constructor('!exemple', constructeur_exemple)

yaml_str = "!exemple 'données'"
loaded = yaml.load(yaml_str, Loader=yaml.FullLoader)

print(loaded.valeur)  # Sortie : données

Dans cet extrait, !exemple est une étiquette personnalisée utilisée pour instancier un objet Exemple avec la valeur ‘données’ à partir d’une chaîne YAML. Des chargeurs personnalisés comme celui-ci étendent la flexibilité de PyYAML, permettant le traitement de structures de données et de types plus complexes.