Un gestor de contexto open() de sólo lectura
Tienes un montón de archivos de datos para tu próximo proyecto de aprendizaje profundo que te ha llevado meses recopilar y limpiar. Sería terrible que sobrescribieras accidentalmente uno de esos archivos al intentar leerlo para entrenarte, así que decides crear una versión de sólo lectura del gestor de contextos open()
para utilizarla en tu proyecto.
El gestor de contexto habitual de open()
:
- toma un nombre de archivo y un modo (
'r'
para leer,'w'
para escribir o'a'
para añadir) - abre el archivo para leerlo, escribirlo o añadirlo
- devuelve el control al contexto, junto con una referencia al archivo
- espera a que termine el contexto
- y luego cierra el archivo antes de salir
Tu gestor contextual hará lo mismo, salvo que sólo tomará el nombre del archivo como argumento y sólo abrirá el archivo para leerlo.
Este ejercicio forma parte del curso
Escribir funciones en Python
Instrucciones de ejercicio
- Cede el control de
open_read_only()
al bloque de contexto, asegurándote de que el objetoread_only_file
se asigna amy_file
. - Utiliza el método
.close()
deread_only_file
para asegurarte de que no dejas archivos abiertos por ahí.
Ejercicio interactivo práctico
Pruebe este ejercicio completando este código de muestra.
@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())