IniziaInizia gratis

Un context manager open() in sola lettura

Hai un sacco di file di dati per il tuo prossimo progetto di deep learning che ti hanno richiesto mesi per essere raccolti e ripuliti. Sarebbe terribile sovrascriverne uno per errore mentre provi a leggerlo per l'addestramento, quindi decidi di creare una versione in sola lettura del context manager open() da usare nel tuo progetto.

Il context manager open() standard:

  • accetta un nome di file e una modalità ('r' per leggere, 'w' per scrivere, oppure 'a' per accodare)
  • apre il file in lettura, scrittura o in modalità append
  • restituisce il controllo al contesto, insieme a un riferimento al file
  • attende che il contesto termini
  • e poi chiude il file prima di uscire

Il tuo context manager farà la stessa cosa, tranne che accetterà solo il nome del file come argomento e aprirà il file esclusivamente in lettura.

Questo esercizio fa parte del corso

Scrivere funzioni in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Restituisci il controllo da open_read_only() al blocco di contesto, assicurandoti che l'oggetto read_only_file venga assegnato a my_file.
  • Usa il metodo .close() di read_only_file per assicurarti di non lasciare file aperti in giro.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

@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())
Modifica ed esegui il codice