Python 中 WITH 语句有什么作用?
在本文中,我们将学习 Python 中的“with”语句及其用途。
Python 中的 with 语句用简单的简写替换了 try-catch 块。
更重要的是,它确保在处理完资源后立即关闭资源。
读取或写入文件是 with 语句的常见用途。
上下文管理器是一个支持 with 语句的函数或类。上下文管理器使您能够在需要时打开和关闭资源。
例如,open() 函数是一个上下文管理器。当您使用 with 语句调用 open() 函数时,文件会在您处理完它后自动关闭。
使用“with”语句打开并读取文件
算法(步骤)
以下是执行所需任务需遵循的算法/步骤:
使用open()函数(打开文件并返回文件对象作为结果)以只读模式打开文本文件,将文件名和模式作为参数传递给它(此处“r”表示只读模式)。
with open(inputFile, 'r') as fileData:
使用readlines()函数获取给定文本文件的行列表。
file.readlines(hint)
使用 for 循环遍历给定文本文件的每一行。
打印文本文件的对应行。
示例
# input file path inputFile = "ExampleTextFile.txt" print("The lines of a given Text File are:") # Opening the given file in read-only mode. with open(inputFile, 'r') as fileData: # Read the above file lines using readlines() fileLines = fileData.readlines() # Traverse in the each line of the text file for textLine in fileLines: # printing each line print(textLine)
输出
The lines of a given Text File are: Good Morning this is Tutorials Point sample File Consisting of Specific Good source codes in Python,Seaborn,Scala Summary and Explanation
With 关键字不仅用于以读取模式打开文件,还用于为打开的文件分配别名。
使用“with”语句替换 try-catch 块
在 Python 中,您可以使用 try-catch 错误处理来打开和写入文件。
with语句在后台替换了以下类型的 try-catch 块
示例
# opening the file in write mode using the open() function inputFile = open("tutorialsFile.txt", "w") # handling the exceptions using try-catch blocks try: # writing text into the file inputFile.write("Hello tutorialsPoint python") finally: # closing the file inputFile.close()
输出
Hello tutorialsPoint python
此程序打开文件tutorialsFile.txt。如果不存在此类文件,则程序会创建它。然后,代码将“Hello tutorialsPoint python”写入文件,然后关闭它。
此方法没有问题。但是,有一种更优雅的方法可以使用with语句来实现此目的。
现在让我们使用with语句重新创建前面的示例:
# opening a file in write mode with an alias name using with statement with open("tutorialsFile.txt", "w") as file: # writing text into the file file.write("Hello tutorialsPoint 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()
上述程序的用法
使用 FileWriter(filename),会创建一个新的 FileWriter 对象并调用 __enter__ ()。
__enter__() 方法用于初始化所需的资源。在本例中,它打开一个文本文件。它还必须返回资源的描述符,因此它返回打开的文件。
as file 将文件分配给变量 file。
最后,将在冒号后面的 with 块中放置将使用获取的资源执行的代码。
此代码完成执行时,会自动调用 __exit__() 方法。在本例中,它关闭文件。
如何编写上下文管理器方法?
前面编写的上下文管理器是一个类,但如果要创建类似于 open() 函数的上下文管理器方法怎么办?Python 也允许您编写上下文管理器方法。
使用contextlib模块将方法转换为上下文管理器。
示例
# importig the contextmanager from contextlib module from contextlib import contextmanager # Marking the file_open() function as a context manager # using contextmanager decorator @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")
exampleFile.txt
Hello tutorialsPoint python
在这里,我们创建了一个新函数并使用 with 关键字命名它。当我们调用该函数时,它会尝试以写入模式打开指定的文件并返回结果。如果发生错误,文件将被关闭。
结论
我们在本文中学习了如何使用 with 语句以及示例。