开始使用免费开始使用

只读版 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())
编辑并运行代码