只读版 open() 上下文管理器
您为下一个深度学习项目收集并清洗了一堆数据文件,花了数月时间。如果在读取用于训练的数据时不小心把其中某个文件覆盖了,那就太糟糕了。因此,您决定在项目中创建一个只读版本的 open() 上下文管理器。
常规的 open() 上下文管理器:
- 接收文件名和模式(
'r'表示读取,'w'表示写入,'a'表示追加) - 以读取、写入或追加方式打开文件
- 将控制权连同文件引用一起交回给上下文
- 等待上下文执行完毕
- 然后在退出前关闭文件
您要编写的上下文管理器也会执行上述步骤,不同之处在于它只接收文件名作为参数,并且只以读取方式打开文件。
本练习是课程的一部分
Python 函数编写
练习说明
- 从
open_read_only()向上下文代码块让出控制权,确保对象read_only_file被赋值给my_file。 - 使用
read_only_file的.close()方法,确保不会遗留未关闭的文件。
交互式实操练习
通过完成这段示例代码来试试这个练习。
@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())