Un gestionnaire de contexte open() en lecture seule
Vous avez un tas de fichiers de données pour votre prochain projet d'apprentissage en profondeur qui vous ont pris des mois à collecter et à nettoyer. Il serait terrible d'écraser accidentellement l'un de ces fichiers en essayant de le lire pour la formation. Vous décidez donc de créer une version en lecture seule du gestionnaire de contexte open()
pour l'utiliser dans votre projet.
Le gestionnaire de contexte habituel de open()
:
- prend un nom de fichier et un mode (
'r'
pour la lecture,'w'
pour l'écriture, ou'a'
pour l'ajout). - ouvre le fichier pour la lecture, l'écriture ou l'ajout de données
- rend le contrôle au contexte, ainsi qu'une référence au fichier
- attend que le contexte se termine
- puis ferme le fichier avant de quitter
Votre gestionnaire de contexte fera la même chose, sauf qu'il ne prendra que le nom du fichier comme argument et qu'il n'ouvrira le fichier qu'en lecture.
Cet exercice fait partie du cours
Écrire des fonctions en Python
Instructions
- Transférez le contrôle de
open_read_only()
au bloc contextuel, en veillant à ce que l'objetread_only_file
soit assigné àmy_file
. - Utilisez la méthode
.close()
deread_only_file
pour vous assurer que vous ne laissez pas traîner des fichiers ouverts.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
@contextlib.contextmanager
def open_read_only(filename):
"""Open a file in read-only mode.
Args:
filename (str): The location of the file to read
Yields:
file object
"""
read_only_file = open(filename, mode='r')
# Yield read_only_file so it can be assigned to my_file
____ ____
# Close read_only_file
____.____()
with open_read_only('my_file.txt') as my_file:
print(my_file.read())