Formats de données : json

Utilisation du format json en python.

Le format json vient du web. C'est le format idéal pour transférer des données sous la forme d'un texte. Il a de nombreux avantages, citons en deux :

Ci-après, un exemple de fichier json contenant des super-héros (adapté de la documentation javascript de Mozilla. Si vous voulez apprendre le web, c'est une bonne adresse), on supposera pour la suite que vous avez dans le dossier du projet courant le fichier données.csv contenant :

[
  {
    "nom": "La Machine",
    "age": 33,
    "identitéSecrète": "Alan Turing",
    "pouvoirs": [
      "Indécidable",
      "Ne s'arrête jamais"
    ]
  },
  {
    "nom": "Code girl",
    "age": 27,
    "identitéSecrète": "Ada Lovelace",
    "pouvoirs": [
      "Calculatrice"
    ]
  }
]

C'est une liste de deux éléments, chaque élément étant composée de clés et de valeurs comme dans un dictionnaire python. La seule différence est qu'une clé est toujours une chaîne de caractère.

Utilisez un plugin vscode pour pouvoir visualiser clairement les fichiers csv.

Il en existe de nombreux. J'ai installé le tout simple Prettify JSON pour rendre lisible tout fichier json.

Json et dictionnaires en python

Un json c'est une chaîne de caractère qui est transformée en données (de type entier, réel, etc). Python utilise nativement le json via sa bibliothèque json.

Un dictionnaire python :

mes_donnees_dictionnaire = {
    "x": [1, 2, 3, 4, 5],
    "y": [-1, -2, -3, -4, -5]
}

Se transforme en json (une chaîne de caractère) avec json.dumps :

import json

texte_json = json.dumps(mes_donnees_dictionnaire)

Pour le représenter de façon joli, on pourra ajouter les arguments :

print(json.dumps(mes_donnees_dictionnaire, indent=4))

Cette chaîne peut à nouveau être transformée en dictionnaire grâce à json.loads :

donnees = json.loads(texte_json)

Lecture de fichiers

Pour lire un fichier on utilise la méthode json.load (à ne pas confondre avec json.loads qui est pour les chaines de caractères).

f = open("données.json", "r")
data = json.load(f)
f.close()

Une fois lu, le fichier json est converti en objet python. L'objet data est donc une liste composée de deux dictionnaires.

Écriture de fichiers

Pour lire un fichier on utilise la méthode json.dump (à ne pas confondre avec json.dumps qui est pour les chaines de caractères).

Json

Téléchargez Informations générales sur les Sénateurs au format json à partir de cette page.

Examinez le fichier json :

  1. Comment sont organisées les données ?
  2. Quelles sont les données stockées pour chaque sénateur ?
  3. Combien y a-t-il de sénateurs actifs ?

En utilisant la partie date ci-après :

Déterminez l'âge moyen des sénateurs encore en activité.

Gestion des dates

Lorsque l'on travaille avec des dates en informatique, il ne faut JAMAIS le faire à la main. On utilise toujours une bibliothèque pour cela car il y a trop de cas particulier.

Dates en python

En python, cette bibliothèque s'appelle datetime. Pour le sujet qui nous intéresse, on a besoin de transformer une chaîne de caractères en date. Ceci est possible avec la méthode strptime.

Si on veut par exemple convertir la date "01/04/2020 à 14h34" en date python, on passe la chaine de caractère et le format à strptime :

from datetime import datetime

date_en_chaîne = "01/04/2020 à 14h34"
format = "%d/%m/%Y à %Hh%M"

date = datetime.strptime(date_en_chaîne, format)

Différences de dates

En python la différence de 2 dates est un objet spécial de type timedelta. Par exemple, la différence de temps entre le moment présent et la date précédemment calculée est :


maintenant = datetime.now()  #  la date de maintenant

delta = maintenant - date

On peut ensuite connaître le nombre de secondes de cette différence :

delta.total_seconds()

Ou le nombre de jours, secondes et microsecondes que cela représente :

delta.days
delta.seconds
delta.microseconds