Un context manager open() doar pentru citire
Ai o serie de fișiere cu date pentru următorul tău proiect de învățare profundă, pe care ai petrecut luni întregi colectându-le și curățându-le. Ar fi groaznic să suprascrii accidental unul dintre aceste fișiere atunci când încerci să îl citești pentru antrenament, așa că decizi să creezi o versiune doar pentru citire a context manager-ului open(), pe care s-o folosești în proiect.
Context manager-ul standard open():
- primește un nume de fișier și un mod (
'r'pentru citire,'w'pentru scriere sau'a'pentru adăugare) - deschide fișierul pentru citire, scriere sau adăugare
- cedează controlul înapoi la context, împreună cu o referință la fișier
- așteaptă ca blocul de context să se termine
- și apoi închide fișierul înainte de a ieși
Context manager-ul tău va face același lucru, cu excepția că va primi doar numele fișierului ca argument și va deschide fișierul numai pentru citire.
Acest exercițiu face parte din cursul
Scrierea funcțiilor în Python
Instrucțiuni pentru exercițiu
- Cedează controlul din
open_read_only()către blocul de context, asigurându-te că obiectulread_only_fileeste atribuit variabileimy_file. - Folosește metoda
.close()a obiectuluiread_only_filepentru a te asigura că nu lași fișiere deschise.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
@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())