Python3.8.10中的'open("file_path")'和'withopen("file_path")'有什么区别,哪一个最适合使用?

我正在学习 Python,我发现有两种类型的文件打开操作。第一个是,

myreadfile = open("bear.txt", "r")
content = myreadfile.read()

第二种方法是

with open("bear.txt") as file:
    content = file.read()

我想知道这两种方法有什么区别,哪一种最适合使用。

回答

他们是上下文管理器。

解释:

with方法是一个上下文管理器,如果您使用它来读取或写入 I/O 文件,它将自动关闭文件,不需要添加一行file.close(),如文档中所述:

上下文管理器允许您在需要时准确地分配和释放资源。上下文管理器最广泛使用的例子是with语句。假设您有两个相关的操作,您希望它们成对执行,中间有一个代码块。上下文管理器允许您专门执行此操作。

例子:

文档中有示例,常规with语句:

with open('some_file', 'w') as opened_file:
    opened_file.write('Hola!')

相当于:

file = open('some_file', 'w')
try:
    file.write('Hola!')
finally:
    file.close()

它说:

将其与第一个示例进行比较时,我们可以看到仅使用with. 使用with语句的主要优点是它可以确保我们的文件关闭,而无需注意嵌套块的退出方式。

实现的简单介绍:

如文档中所述,上下文管理器可以通过以下方式实现class

至少上下文管理器定义了一个__enter__and__exit__方法。

如图所示,a 中的示例上下文管理器实现class将类似于:

class File(object):
    def __init__(self, file_name, method):
        self.file_obj = open(file_name, method)
    def __enter__(self):
        return self.file_obj
    def __exit__(self, type, value, traceback):
        self.file_obj.close()
with File('demo.txt', 'w') as opened_file:
    opened_file.write('Hola!')

由于魔术方法,代码可以像上下文管理器一样运行,__enter__并且__exit__.


以上是Python3.8.10中的'open("file_path")'和'withopen("file_path")'有什么区别,哪一个最适合使用?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>