如果我在没有关闭文件的情况下读取文件会发生什么?

时间:2013-07-22 07:16:27

标签: python file-io

我曾经读过这样的文件:

f = [i.strip("\n") for i in open("filename.txt")]

效果很好。我更喜欢这种方式,因为它比网上可用的传统文件读取代码样本更清晰,更短(例如f = open(...),f.readlines(),f.close()中的行。

然而,我想知道读取这样的文件是否有任何缺点,例如因为我没有关闭文件,Python解释器本身会处理吗?有什么我应该小心使用这种方法吗?

3 个答案:

答案 0 :(得分:3)

这是推荐的方式:

with open("filename.txt") as f:
    lines = [line.strip("\n") for line in f]

另一种方法可能无法长时间关闭输入文件。这可能与您的申请无关。

with语句负责为您关闭文件。在CPython中,只是让文件句柄对象被垃圾收集应该为你关闭文件,但在其他类型的Python(Jython,IronPython,PyPy)中,你绝对不能指望这一点。此外,with声明使您的意图非常清晰,并符合惯例。

答案 1 :(得分:1)

来自docs

  

完成文件后,请调用f.close()将其关闭并释放打开文件占用的所有系统资源。

使用后,您应始终关闭文件。 Python 不会自动为您执行此操作。如果您想要更简洁的方法,请使用with语句:

with open("filename.txt") as myfile:
    lines = [i.strip("\n") for i in myfile]

这有两个好处:

  • 它会在with阻止

  • 后自动关闭文件
  • 如果出现异常,则无论如何都会关闭该文件。

答案 2 :(得分:0)

可能在有限数量的情况下可以正常使用,例如临时考试。 Python只会在完成执行后关闭文件句柄。 因此,这种方法对于正确的应用来说是不可取的。