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
Istruzioni dell'esercizio
- Restituisci il controllo da
open_read_only()al blocco di contesto, assicurandoti che l'oggettoread_only_filevenga assegnato amy_file. - Usa il metodo
.close()diread_only_fileper 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())