Een contextmanager voor alleen-lezen open()
Je hebt een stapel databestanden voor je volgende deep learning-project waar je maanden aan hebt verzameld en opgeschoond. Het zou vreselijk zijn als je per ongeluk een van die bestanden zou overschrijven wanneer je het probeert in te lezen voor training, dus besluit je een alleen-lezen versie van de open()-contextmanager te maken voor je project.
De gewone open()-contextmanager:
- neemt een bestandsnaam en een modus (
'r'voor lezen,'w'voor schrijven of'a'voor toevoegen) - opent het bestand om te lezen, te schrijven of toe te voegen
- geeft de controle terug aan de context, samen met een verwijzing naar het bestand
- wacht tot de context klaar is
- en sluit vervolgens het bestand voordat hij afsluit
Jouw contextmanager doet hetzelfde, behalve dat hij alleen de bestandsnaam als argument accepteert en het bestand uitsluitend opent om te lezen.
Deze oefening maakt deel uit van de cursus
Functies schrijven in Python
Oefeninstructies
- Geef de controle vanuit
open_read_only()door aan het contextblok, zodat het objectread_only_filewordt toegewezen aanmy_file. - Gebruik de
.close()-methode vanread_only_fileom te zorgen dat je geen bestanden open laat staan.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
@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())