Menedżer kontekstu open() tylko do odczytu
Zgromadziłeś wiele plików z danymi do swojego kolejnego projektu głębokiego uczenia – ich zebranie i oczyszczenie zajęło ci miesiące. Przypadkowe nadpisanie jednego z tych plików podczas wczytywania go do treningu byłoby katastrofą, dlatego postanawiasz stworzyć wersję menedżera kontekstu open() działającą wyłącznie w trybie odczytu.
Standardowy menedżer kontekstu open():
- przyjmuje nazwę pliku i tryb (
'r'– odczyt,'w'– zapis,'a'– dołączanie) - otwiera plik w wybranym trybie
- przekazuje sterowanie do bloku kontekstu wraz z referencją do pliku
- czeka na zakończenie bloku kontekstu
- a następnie zamyka plik przed wyjściem
Twój menedżer kontekstu będzie działał tak samo, z tą różnicą, że przyjmie wyłącznie nazwę pliku jako argument i otworzy plik tylko do odczytu.
To ćwiczenie jest częścią kursu
Pisanie funkcji w Pythonie
Instrukcje do ćwiczenia
- Przekaż sterowanie z
open_read_only()do bloku kontekstu, zapewniając, że obiektread_only_filezostanie przypisany domy_file. - Użyj metody
.close()obiekturead_only_file, aby nie pozostawiać otwartych plików po zakończeniu pracy.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
@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())