Vous êtes sur la page 1sur 5

Accueil > Cours > Démarrez votre projet avec Python > [BONUS] Stockez des citations dans

un chier avec le module


json

Démarrez votre projet avec Python

4 heures  Facile

Mis à jour le 05/06/2020

 

[BONUS] Stockez des citations dans un chier avec


le module json
#
Ce chapitre concerne une utilisation plus avancée de Python. Vous êtes prêt·e pour un nouveau
dé ? Suivez-moi !
07:30

Attaquons-nous en premier à la fonctionnalité “Stocker nos citations et nos personnages dans un


chier externe.”

A n que ce soit plus lisible, nous allons déplacer la liste de nos citations et celle de nos personnages
dans deux chiers différents. Nous pourrions les stocker dans un chier Python mais il n’y a pas de
calcul à faire donc ce serait inapproprié. Nous cherchons un format de donnée pour enregistrer du
texte. Idéalement, j’aimerais beaucoup que mes citations et mes personnages soient stockés sous
forme de dictionnaire pour que vous puissiez continuer à vous entraîner ! Hé oui, je suis un peu sadique
! ^_^

La meilleure manière de le faire est d’utiliser un format de données qui s’appelle JSON (rien à voir avec
le célèbre péplum). Il conserve, sous forme de dictionnaire, tout le texte que nous souhaitons.

Avant de l'utiliser, pensez à importer le module JSON !

import json

Ce format, qui signi e JavaScript Object Notation, est souvent utilisé pour représenter le contenu
d’une page web car il est très facile d’imbriquer des listes à l’intérieur d’autres listes. Vous ne serez pas
en pays inconnu : la syntaxe ressemble beaucoup à celle de Python.

Chaque valeur ayant forcément une clé, voici la manière dont nous allons stocker nos objets :
{"nom_objet": "valeur"}

Commençons par les citations. Créons un nouveau document quotes.json et remplissons-le :

quotes.json
json

1 [{"quote": "Ecoutez-moi, Monsieur Shakespeare, nous avons beau être ou ne pas être, nous sommes
!"},
2 {"quote": "On doit pouvoir choisir entre s'écouter parler et se faire entendre."}]

Faisons-en de même pour les personnages :

characters.json
json

1 [{"character": "alvin et les Chimpunks"},


2 {"character": "Babar"}]

Bien. Je veux maintenant lire le chier characters.json et le convertir en liste. Vous êtes prêt·e ?
Ecrivons du pseudo-code :
python

1 def read_values_from_json():
2 # Create a new empty list
3 # open a json file with my objects
4 # load all the data contained in this file
5 # add each item in my list
6 # return my completed list

Oooooookay ! On se frotte les mains, on s’étire un peu les épaules et on y va !

Complétons avec ce que nous savons déjà faire :


python

1 def read_values_from_json():
2 values = []
3 # open a json file with my objects
4 # load all the data contained in this file. data = entries
5 for entry in data:
6 values.append(entry["character"])
7 return values

Trouvons maintenant, comment charger un document. La documentation de Python nous propose la


méthode open('path_to_file') qui est souvent utilisée avec un bloc with .

On n’a pas vu ça encore !


Effectivement. Le bloc with file as variable: vous permet de travailler avec un document

externe en toute sécurité. Lorsque vous utilisez la méthode open() , Python ouvre le chier pour
vous mais ne le ferme pas après avoir ni de l’utiliser ! Or vous risquez des erreurs si vous essayez
d’ouvrir un chier qui est déjà ouvert… Le bloc with ouvre le chier et le ferme à la n. Magique !

Pour en savoir plus, lisez la documentation. 😉

Complétons :
python

1 def read_values_from_json(key):
2 values = []
3 with open("characters.json") as f:
4 # load all the data contained in this file. data = entries
5 for entry in data:
6 values.append(entry["character"])
7 return values

Fouillons maintenant dans la documentation du module json pour trouver comment charger le
contenu d’un chier json et le convertir en objet Python (car pour l’instant ce n’est que du texte !).

La méthode load() semble parfaite : elle transforme un chier JSON en objet Python.
python

1 def read_values_from_json(key):
2 values = []
3 with open("characters.json") as f:
4 data = json.load(f)
5 for entry in data:
6 values.append(entry["character"])
7 return values

Nous pouvons aller plus loin en spéci ant le chier à lire et la clé à utiliser. Ceci nous permettra de lire
le chier de personnages et celui de citations !
python

1 def read_values_from_json(file, key):


2 values = []
3 with open(file) as f:
4 data = json.load(f)
5 for entry in data:
6 values.append(entry[key])
7 return values

Bravo ! Nous avons fait le plus dif cile !


A n de nir ce chapitre en toute beauté, créons une nouvelle fonction qui renverra un personnage au
hasard :
python

1 # Return a random value from a json file


2 def random_character():
3 all_values = read_values_from_json()
4 return get_random_item_in(all_values)

Bien. Il nous manque encore une dernière étape : récupérer des citations venant d’Internet ! Je vous
laisse faire une petite pause, prendre un café ou marcher un peu et je vous retrouve en pleine forme
dans le prochain chapitre !

N'hésitez pas à vous référer à la doc de toutes les librairies Python lorsque vous avez un projet
en tête pour véri er les briques que vous allez déjà pouvoir réutiliser !

Code du chapitre


Retrouvez le code de ce chapitre sur le dépôt GitHub en cliquant ici.

J'AI TERMINÉ CE CHAPITRE ET JE PASSE AU SUIVANT

[BONUS] COLLECTEZ DES CITATIONS


 INSTALLEZ VOTRE PREMIER MODULE 
AUTOMATIQUEMENT AVEC SCRAPY

Le professeur
Céline Martinet Sanchez
Développeuse freelance, entrepreneure et formatrice. Diplômée du Master Grande École
d'Audencia.

OPENCLASSROOMS

ENTREPRISES

CONTACT

Vous aimerez peut-être aussi