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
Anleitung zur Übung
- Übergib die Kontrolle von
open_read_only()an den Kontextblock und stelle sicher, dass das Objektread_only_filemy_filezugewiesen wird. - Verwende die Methode
.close()vonread_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())