• 4 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 03/06/2021

[BONUS] Stockez des citations dans un fichier avec le module json

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

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

Afin que ce soit plus lisible, nous allons déplacer la liste de nos citations et celle de nos personnages dans deux fichiers différents. Nous pourrions les stocker dans un fichier 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.

Ce format, qui signifie 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

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

Faisons-en de même pour les personnages :

characters.json

[{"character": "alvin et les Chimpunks"},
{"character": "Babar"}]

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

def read_values_from_json():
# Create a new empty list
# open a json file with my objects
# load all the data contained in this file
# add each item in my list
# 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 :

def read_values_from_json():
values = []
# open a json file with my objects
# load all the data contained in this file. data = entries
for entry in data:
values.append(entry["character"])
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 fichier pour vous mais ne le ferme pas après avoir fini de l’utiliser ! Or vous risquez des erreurs si vous essayez d’ouvrir un fichier qui est déjà ouvert… Le bloc  with  ouvre le fichier et le ferme à la fin. Magique !

Pour en savoir plus, lisez la documentation. 😉

Complétons :

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

Fouillons maintenant dans la documentation du module json pour trouver comment charger le contenu d’un fichier 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 fichier JSON en objet Python.

def read_values_from_json(key):
values = []
with open("characters.json") as f:
data = json.load(f)
for entry in data:
values.append(entry["character"])
return values

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

def read_values_from_json(file, key):
values = []
with open(file) as f:
data = json.load(f)
for entry in data:
values.append(entry[key])
return values

Bravo ! Nous avons fait le plus difficile !
Afin de finir ce chapitre en toute beauté, créons une nouvelle fonction qui renverra un personnage au hasard :

# Return a random value from a json file
def random_character():
all_values = read_values_from_json()
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 !

Code du chapitre

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

Exemple de certificat de réussite
Exemple de certificat de réussite