如果我不将文件分配给变量,文件会自动关闭吗?

时间:2012-12-06 05:43:59

标签: python file-io scope

  

可能重复:
  Is close() necessary when using iterator on a Python file object

for line in open("processes.txt").readlines():
    doSomethingWith(line)

以该代码为例。没有什么可以调用close()。它会自动关闭吗?

2 个答案:

答案 0 :(得分:7)

取消分配相应对象时,文件将关闭。你给出的样本取决于那个;没有对象的引用,因此将删除该对象并关闭该文件。

需要注意的重要一点是,无法保证何时删除该对象。使用CPython,您可以将引用计数作为内存管理的基础,因此您可以期望文件立即关闭。例如,在Jython中,垃圾收集器不能保证在任何特定时间(甚至根本不运行)运行,因此您不应指望文件被关闭,而应该手动关闭文件或(更好)使用{ {1}}陈述。

答案 1 :(得分:5)

AFAIK他们没有。要进行自动关闭,您需要使用上下文管理器,例如with

虽然对象本身可以通过垃圾收集回收并关闭,但是没有确定的时间来进行垃圾收集。

with open("processes.txt") as openfile:
    <do stuff>