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__.
THE END
二维码