if open(file1).read() == open(file2).read():
print('match')
比较后我需要关闭这些文件吗?我知道在做以下事情时我需要,但这有什么不同吗?
target = open(file1)
答案 0 :(得分:5)
在这两种情况下,您描述(命名或未命名的文件对象),未能显式close
该文件将(通常)确定性地在引用解释器上工作,称为CPython(因为它是引用计数的),但是表现得很好在替代解释器上非确定性地(几乎所有解释器都是垃圾收集,而不是参考计数,因此清理可能不会发生,或者可能会被任意延迟)。即使在CPython上分配像target
这样的名称时,一旦有问题的函数返回,通常会发生隐式关闭(禁止打开文件参与引用循环,这可以无限期地延迟清理)。 / p>
最佳做法是始终使用with
语句,无论您是否已分配名称,都可以在所有Python解释器上获得有保证的确定性清理:
with open(file1) as f1, open(file2) as f2:
if f1.read() == f2.read():
print('match')
你仍然不需要在这里调用close
,因为with
语句可以保证从解释器中退出硬件(例如通过调用os._exit
或触发段错误) )当执行流程离开with
块时(return
,通过异常冒泡等),将关闭文件。)
答案 1 :(得分:1)
是的,。您还可以使用with
关键字单独打开每个文件,并获取内容以进行比较。这将处理在离开范围时为您关闭文件指针。
在您的情况下,这将如下所示:
with open(file1, 'r') as f:
content1 = f.read()
with open(file2, 'r') as f:
content2 = f.read()
if content1 == content2:
print('match')
在此进一步解释: