Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Geef de controle vanuit open_read_only() door aan het contextblok, zodat het object read_only_file wordt toegewezen aan my_file.
  • Gebruik de .close()-methode van read_only_file om 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())
Code bewerken en uitvoeren