En skrivskyddad open()-kontexthanterare
Du har en samling datafiler för ditt nästa djupinlärningsprojekt – filer som tog månader att samla in och rensa. Det vore katastrofalt om du råkade skriva över någon av dem när du försöker läsa in dem för träning. Därför bestämmer du dig för att skapa en skrivskyddad version av kontexthanteraren open() att använda i projektet.
Den vanliga kontexthanteraren open():
- tar ett filnamn och ett läge (
'r'för läsning,'w'för skrivning eller'a'för att lägga till) - öppnar filen för läsning, skrivning eller tillägg
- lämnar kontrollen tillbaka till kontexten, tillsammans med en referens till filen
- väntar tills kontexten är klar
- och stänger sedan filen innan den avslutas
Din kontexthanterare gör samma sak, förutom att den bara tar filnamnet som argument och enbart öppnar filen för läsning.
Den här övningen är en del av kursen
Att skriva funktioner i Python
Övningsinstruktioner
- Lämna kontrollen från
open_read_only()till kontextblocket och se till att objektetread_only_filetilldelas tillmy_file. - Använd
.close()-metoden påread_only_fileför att undvika att lämna öppna filer efter dig.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
@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())