JSON et YAML en Python

PythonBeginner
Pratiquer maintenant

Introduction

Dans le développement logiciel moderne, les données sont souvent stockées et transportées dans des formats standardisés. Le JSON (JavaScript Object Notation) et le YAML (YAML Ain't Markup Language) sont deux des formats les plus populaires pour tout, des réponses d'API web aux fichiers de configuration d'applications.

Dans ce laboratoire, vous acquerrez les compétences essentielles pour travailler avec ces formats en Python. Vous commencerez par utiliser le module intégré json de Python pour lire et écrire des données JSON. Ensuite, vous explorerez le YAML comme alternative plus lisible par l'humain et apprendrez à l'analyser à l'aide de la bibliothèque ruamel.yaml. Enfin, vous découvrirez la bibliothèque anyconfig, un outil puissant qui simplifie la gestion de la configuration en vous permettant de charger des données à partir de divers formats de fichiers sans vous soucier de l'implémentation sous-jacente.

Travailler avec JSON

Dans cette étape, vous apprendrez à sérialiser et désérialiser des données JSON. JSON signifie JavaScript Object Notation et est un format léger pour stocker et transporter des données. Il est couramment utilisé lorsque des données sont envoyées d'un serveur vers une page web.

Remarque : Si vous n'êtes pas familier avec l'utilisation de WebIDE (similaire à VS Code), veuillez d'abord vous familiariser avec celui-ci via ce laboratoire.

Commençons par écrire un dictionnaire Python dans un fichier JSON. Ce processus est appelé sérialisation.

Dans l'explorateur de fichiers à gauche, ouvrez le fichier json_handler.py et ajoutez le code suivant. Ce script créera un nouveau fichier nommé output.json.

## Write JSON file: json.dump() writes Python object as JSON
import json

content = {"name": "Joe", "age": 20}
with open("output.json", "w") as f:  ## Open file in write mode
    json.dump(content, f, indent=2)  ## Write JSON with 2-space indentation

Analysons le code :

  • import json : Importe le module JSON intégré de Python.
  • content = {"name": "Joe", "age": 20} : Définit un dictionnaire Python que nous voulons enregistrer.
  • with open("output.json", "w") as f: : Ouvre un fichier nommé output.json en mode écriture ("w").
  • json.dump(content, f, indent=2) : Écrit le dictionnaire content dans le fichier f au format JSON. L'argument indent=2 formate le JSON avec une indentation de 2 espaces, le rendant plus lisible.

Maintenant, exécutez le script dans le terminal pour créer le fichier :

python3 json_handler.py

Vous ne verrez aucune sortie, mais un nouveau fichier output.json a été créé. Vous pouvez visualiser son contenu avec la commande cat :

cat output.json

Vous devriez voir le contenu JSON formaté :

{
  "name": "Joe",
  "age": 20
}

Ensuite, lisons un fichier JSON dans un objet Python. Ce processus est appelé désérialisation. Nous allons lire le fichier data.json qui a été préparé pour vous.

Modifiez le fichier json_handler.py avec le code suivant :

## Read JSON file: json.load() parses JSON from file object
import json

with open("data.json", "r") as f:  ## Open file in read mode
    content = json.load(f)  ## Parse JSON and return Python dict/list
    print(content)

Voici ce que fait le nouveau code :

  • with open("data.json", "r") as f: : Ouvre le fichier data.json existant en mode lecture ("r").
  • content = json.load(f) : Analyse les données JSON du fichier et les convertit en un dictionnaire Python.
  • print(content) : Affiche le dictionnaire résultant dans la console.

Exécutez à nouveau le script :

python3 json_handler.py

Cette fois, vous verrez le dictionnaire Python affiché dans le terminal :

{'username': 'labex', 'id': 12345}

Manipuler le YAML

Dans cette étape, vous explorerez le YAML, un format de sérialisation de données conçu pour être lisible par l'humain. Comparé au JSON, le YAML est souvent plus facile à maintenir manuellement et permet l'ajout de commentaires, ce qui en fait un choix populaire pour les fichiers de configuration.

Python ne possède pas d'analyseur YAML intégré, vous devez donc installer une bibliothèque tierce. Deux bibliothèques principales sont disponibles : PyYaml et ruamel.yaml. La bibliothèque ruamel.yaml est plus conforme à la spécification YAML et est plus efficace pour préserver les commentaires et le formatage lors de la modification des fichiers. Nous l'utiliserons dans ce laboratoire.

Tout d'abord, installez ruamel.yaml en utilisant pip :

pip install ruamel.yaml

Vous verrez une sortie indiquant que l'installation a réussi.

Maintenant, utilisons cette bibliothèque pour lire le fichier config.yaml. Ouvrez le fichier yaml_handler.py dans l'éditeur et ajoutez le code suivant :

## Read YAML file using ruamel.yaml library
from ruamel.yaml import YAML

with open("config.yaml") as f:
    yaml=YAML()  ## Create YAML parser instance
    data = yaml.load(f)  ## Parse YAML and return Python dict/list
    print(data)

Passons en revue le code :

  • from ruamel.yaml import YAML : Importe la classe YAML nécessaire depuis la bibliothèque.
  • with open("config.yaml") as f: : Ouvre le fichier config.yaml en lecture.
  • yaml=YAML() : Crée une instance de l'analyseur YAML.
  • data = yaml.load(f) : Analyse le contenu YAML du fichier et le convertit en un objet Python (dans ce cas, un dictionnaire).
  • print(data) : Affiche les données chargées.

Exécutez le script depuis le terminal :

python3 yaml_handler.py

La sortie sera la représentation en dictionnaire Python du contenu du fichier YAML :

{'user': {'name': 'Alex', 'email': 'alex@example.com'}}

Utiliser Anyconfig

Dans cette étape, vous découvrirez le paquet anyconfig, une bibliothèque très pratique qui abstrait le format du fichier de configuration sous-jacent. Elle vous permet de charger un dictionnaire Python à partir de divers formats comme JSON, YAML, TOML, et plus encore, en utilisant une fonction unique et simple. C'est extrêmement utile lorsque votre application doit prendre en charge plusieurs formats de configuration.

Tout d'abord, vous devez installer anyconfig. Comme anyconfig a besoin d'un moteur pour analyser le YAML, et que nous avons déjà installé ruamel.yaml, il l'utilisera automatiquement.

Installez anyconfig via pip :

pip install anyconfig

Une fois l'installation terminée, vous pouvez utiliser anyconfig pour charger des fichiers de configuration. Utilisons-le pour charger le même fichier config.yaml que lors de l'étape précédente.

Ouvrez le fichier anyconfig_handler.py et ajoutez le code suivant :

## anyconfig: load configuration files in various formats (JSON, YAML, TOML, etc.)
import anyconfig

## anyconfig.load() auto-detects the file format based on the extension.
conf = anyconfig.load("/home/labex/project/config.yaml")
print(conf)

Ce code est beaucoup plus simple :

  • import anyconfig : Importe la bibliothèque.
  • anyconfig.load(...) : Cette fonction unique ouvre, lit et analyse le fichier. Elle détecte automatiquement que config.yaml est un fichier YAML et utilise l'analyseur approprié. Notez que nous utilisons ici un chemin absolu, ce qui est une bonne pratique lorsque l'emplacement du script peut varier.

Maintenant, exécutez le script :

python3 anyconfig_handler.py

Comme cet exemple charge toujours config.yaml, la sortie est identique à celle de l'étape précédente, mais le code requis est plus concis et flexible.

{'user': {'name': 'Alex', 'email': 'alex@example.com'}}

Avec anyconfig, vous pouvez également remplacer "config.yaml" par "data.json" et relancer le script. Le code fonctionnera toujours sans aucune autre modification, mais le dictionnaire affiché reflétera le contenu de data.json au lieu du fichier YAML.

Résumé

Dans ce laboratoire, vous avez appris à manipuler deux formats de sérialisation de données courants en Python : JSON et YAML. Ces compétences sont fondamentales pour des tâches telles que l'utilisation d'API web, la gestion des configurations d'applications et l'échange de données.

Vous avez commencé avec le module intégré json de Python, en utilisant json.dump() pour sérialiser un dictionnaire Python dans un fichier JSON et json.load() pour désérialiser un fichier JSON en un objet Python.

Ensuite, vous avez exploré le YAML comme alternative lisible par l'humain au JSON. Vous avez appris à installer la bibliothèque ruamel.yaml et à l'utiliser pour analyser un fichier YAML.

Enfin, vous avez découvert la bibliothèque anyconfig, un outil puissant qui simplifie la gestion de la configuration. Vous avez vu comment sa fonction anyconfig.load() peut lire des données à partir de différents formats de fichiers sans nécessiter de code spécifique au format, rendant vos applications plus flexibles et plus faciles à maintenir.