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 :
- aisé à lire et modifier sous la forme d'un fichier : pas besoin d'un outil spécial, un simple éditeur de texte suffit.
- aisé à lire et modifier en python : les données json se manipulent sous la forme d'un dictionnaire en python.
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 :
- Comment sont organisées les données ?
- Quelles sont les données stockées pour chaque sénateur ?
- 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