Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Przekaż sterowanie z open_read_only() do bloku kontekstu, zapewniając, że obiekt read_only_file zostanie przypisany do my_file.
  • Użyj metody .close() obiektu read_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())
Edytuj i uruchom kod