![](/img/trans.png)
[英]If you're opening a file using the 'with' statement, do you still need to close the file object?
[英]Do you need to close files when opened and read to compare in an “if” statement?
if open(file1).read() == open(file2).read():
print('match')
比较它们后是否需要关闭这些文件? 我知道在执行以下操作时需要这样做,但这有什么不同吗?
target = open(file1)
在这两种情况下,您都描述了(命名或未命名的文件对象),如果未能明确close
文件,则可以(在大多数情况下)在引用解释器(称为CPython)上确定性地工作(因为已对引用计数),但是在备用解释器中的不确定性(几乎所有垃圾都是垃圾收集的,没有计入引用,因此清理可能不会发生,或者可能会任意延迟)。 即使在CPython上给诸如target
类的名称分配时,隐式关闭通常也将在有问题的函数返回后立即发生(除非打开文件进入引用周期,否则可能无限期地延迟清理)。
最佳实践是始终with
语句一起使用(无论是否已分配名称),以确保对所有Python解释器进行确定性清除:
with open(file1) as f1, open(file2) as f2:
if f1.read() == f2.read():
print('match')
您仍然不需要在此处调用close
,因为with
语句可确保在执行流程离开with
时,避免从解释器硬退出的任何操作(例如,通过调用os._exit
或触发segfault)都将关闭文件with
阻止(通过return
,通过异常冒泡等)。
是的,你愿意 。 您也可以使用with
关键字分别打开每个文件并获取内容进行比较。 这将在离开范围时为您关闭文件指针。
您的情况如下所示:
with open(file1, 'r') as f:
content1 = f.read()
with open(file2, 'r') as f:
content2 = f.read()
if content1 == content2:
print('match')
并在这里进一步说明:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.