Python 中 WITH 语句的用途是什么?

Python 中 WITH 语句的用途是什么?

在本文中,我们将学习 Python 中的 “ with ” 语句及其用途。

  • Python 中的 with 语句用简便的方式替换了 try-catch 代码块。

  • 更重要的是,它确保在处理后立即关闭资源。

  • 读写文件是使用 with 语句的常见用途。

  • 上下文管理器是支持 with 语句的函数或类。上下文管理器使您可以在需要时立即打开和关闭资源。

  • 例如,open() 函数就是一种上下文管理器。当使用 with 语句调用 open() 函数时,文件在处理后会自动关闭。

阅读更多:Python 教程

使用“with”语句打开和读取文件

算法(步骤)

执行所需任务的算法/步骤如下所示−

  • 使用 open() 函数(以文件名和模式作为参数打开文件并返回文件对象)以只读模式打开文本文件(此处 “ r ” 表示只读模式)。
with open(inputFile, 'r') as fileData:
Python
  • 使用 readlines() 函数获取给定文本文件的行列表。
file.readlines(hint)
Python
  • 使用 for 循环遍历给定文本文件的每一行。

  • 打印相应的文本文件行。

示例

# 输入文件路径
inputFile = "ExampleTextFile.txt"
print("给定文本文件的行如下所示:")

# 以只读模式打开给定文件。
with open(inputFile, 'r') as fileData:

   # 用 readlines() 读取上述文件行
   fileLines = fileData.readlines()

   # 遍历文本文件中的每一行
   for textLine in fileLines:

      # 打印每一行
      print(textLine)
Python

输出

给定文本文件的行如下所示:
Good Morning this is Tutorials Point sample File
Consisting of Specific
Good source codes in Python,Seaborn,Scala
Summary and Explanation
Python

with 关键字不仅可以在读模式下打开文件,还可以为打开的文件分配别名。

使用“with”语句替换 try-catch 代码块

在 Python 中,您可以使用 try-catch 错误处理打开和写入文件。

with 语句在幕后用下面的方式替换了 try-catch 代码块。

示例

# 使用 open() 函数以写入模式打开文件
inputFile = open("tutorialsFile.txt", "w")

# 使用 try-catch 代码块处理异常
try:
   # 向文件中写入文本
   inputFile.write("Hello tutorialsPoint python")
finally:
   # 关闭文件
   inputFile.close()
Python

输出

Hello tutorialsPoint python
Python

该程序打开了文件 tutorialsFile.txt 。如果不存在该文件,程序则会创建该文件。然后,该代码将 Hello tutorialsPoint python 写入该文件,然后关闭该文件。

这种方法没有问题。但是,使用 with 语句可以更加优雅地实现该功能。

现在,让我们使用 with 语句来重新创建上述示例 −

# 使用别名名称的 with 语句在写模式下打开文件
with open("tutorialsFile.txt", "w") as file:

   # 向文件中写入文本
   file.write("Hello tutorialsPoint python")
Python

这简化了代码,因为 with 语句可以在使用文件后处理关闭文件的操作。因此,通常使用 with 语句是在 Python 中打开文件的首选技术。

Python “with”语句和上下文管理器

在处理文件时,你可能认为 with 语句只适用于 open() 函数。但是,情况并非如此。还可以创建支持 with 语句的类和对象。

上下文管理器是支持 with 语句的类或函数。

如果你想在项目中增加资源管理,可以使用上下文管理器。要成为 上下文管理器 ,一个类必须实现以下两个方法 −

  • enter()
  • exit()

实现这些方法后,就可以在该类的对象上使用 with 语句。

  • 当调用 with 语句时,enter() 方法被调用。

  • 当退出 with 块的作用域时,exit() 方法被调用。

创建一个文件写入上下文管理器

该类与 open() 方法的功能相同

class FileWriter(object):
   def __init__(self, fileName):
      self.fileName = fileName

   def __enter__(self):
      self.file = open(self.fileName, "w")
      return self.file

   def __exit__(self, exception_type, exception_value, traceback):
      self.file.close()
Python

以上程序使用方法

  • 使用 FileWriter(filename) 创建了新的 FileWriter 对象并调用了 enter() 方法。

  • enter() 方法用于初始化想要的资源。在此场景下,它打开了一个文本文件。它还必须返回资源的描述符,因此它返回打开的文件。

  • 使用 as file 将文件分配给变量文件。

  • 在冒号后,将在获取资源后执行的代码放入 with 块中。

  • 当该代码执行完成时,exit() 方法将自动调用。在此情况下,它关闭了文件。

如何编写上下文管理器方法?

先前编写的上下文管理器是类,但如果您想创建与open()函数相似的上下文管理器方法该怎么办?Python还允许您编写上下文管理器方法。

使用 contextlib 模块将方法转换为上下文管理器。

示例

# 从contextlib模块导入contextmanager
from contextlib import contextmanager

# 使用上下文管理器装饰器将file_open()函数标记为上下文管理器
@contextmanager
def file_open(name):
   try:
      file = open(name, "w")
      yield file
   finally:
      file.close()

with file_open("exampleFile.txt") as file:
   file.write("Hello tutorialsPoint python")
Python

exampleFile.txt

Hello tutorialsPoint python
Python

在这里,我们创建了一个新函数,并用with关键字命名。当我们调用该函数时,它会尝试以写入模式打开指定的文件并返回结果。如果发生错误,文件将被关闭。

结论

我们在本文中学习了如何使用with语句和示例。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册