LoslegenKostenlos loslegen

Ein schreibgeschützter open()-Kontextmanager

Du hast einen Haufen Datendateien für dein nächstes Deep-Learning-Projekt, deren Sammlung und Bereinigung dich Monate gekostet hat. Es wäre wirklich schlimm, wenn du aus Versehen eine dieser Dateien überschreiben würdest, während du sie fürs Training einliest. Deshalb entscheidest du dich, eine schreibgeschützte Version des open()-Kontextmanagers zu erstellen, die du in deinem Projekt verwendest.

Der normale open()-Kontextmanager:

  • nimmt einen Dateinamen und einen Modus entgegen ('r' für read/lesen, 'w' für write/schreiben oder 'a' für append/anhängen)
  • öffnet die Datei zum Lesen, Schreiben oder Anhängen
  • gibt die Kontrolle zusammen mit einer Referenz auf die Datei an den Kontext zurück
  • wartet, bis der Kontext fertig ist
  • und schließt dann die Datei, bevor er beendet

Dein Kontextmanager macht dasselbe, nur dass er nur den Dateinamen als Argument nimmt und die Datei ausschließlich zum Lesen öffnet.

Diese Übung ist Teil des Kurses

Funktionen in Python schreiben

Kurs anzeigen

Anleitung zur Übung

  • Übergib die Kontrolle von open_read_only() an den Kontextblock und stelle sicher, dass das Objekt read_only_file my_file zugewiesen wird.
  • Verwende die Methode .close() von read_only_file, damit keine Dateien offen bleiben.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

@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 bearbeiten und ausführen