Ein schreibgeschützter open()-Kontextmanager
Du hast einen Haufen Daten für dein nächstes Deep-Learning-Projekt, für die du monatelang gesammelt und bereinigt hast. Es wäre schrecklich, wenn du versehentlich eine dieser Dateien überschreibst, wenn du versuchst, sie für die Ausbildung einzulesen. Deshalb beschließt du, eine schreibgeschützte Version des open()
Kontextmanagers zu erstellen, die du in deinem Projekt verwenden kannst.
Der reguläre open()
Kontextmanager:
- nimmt einen Dateinamen und einen Modus (
'r'
für Lesen,'w'
für Schreiben oder'a'
für Anhängen) - öffnet die Datei zum Lesen, Schreiben oder Anhängen
- gibt die Kontrolle an den Kontext zurück, zusammen mit einem Verweis auf die Datei
- wartet darauf, dass der Kontext beendet wird
- und schließt dann die Datei vor dem Beenden
Dein Kontextmanager macht das Gleiche, nur dass er nur den Dateinamen als Argument nimmt und die Datei nur zum Lesen öffnet.
Diese Übung ist Teil des Kurses
Funktionen in Python schreiben
Anleitung zur Übung
- Gib die Kontrolle von
open_read_only()
an den Kontextblock ab und sorge dafür, dass das Objektread_only_file
dem Objektmy_file
zugewiesen wird. - Verwende die Methode
read_only_file
's.close()
um sicherzustellen, dass du keine offenen Dateien herumliegen lässt.
Interaktive Übung zum Anfassen
Probieren Sie diese Übung aus, indem Sie diesen Beispielcode ausführen.
@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())