繁体   English   中英

您是否需要在打开文件时关闭文件并阅读以在“ if”语句中进行比较?

[英]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')

并在这里进一步说明:

https://docs.python.org/2/tutorial/inputoutput.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM