【问题标题】:Do files automatically close if I don't assign them to a variable? [duplicate]如果我不将文件分配给变量,它们会自动关闭吗? [复制]
【发布时间】:2012-11-24 03:05:36
【问题描述】:

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

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

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

【问题讨论】:

  • 如果你从不关闭它,它会在内存中保持打开状态。它不会自动关闭。
  • 那么这是一个不可取的代码 sn-p 吗?我的印象是格式很常见。除非我只是跟着它 close("processes.txt")...?当然……
  • 关闭阅读器就可以了。我建议使用 Snakes 提到的:with() -> 这将保证您在完成文件所需的操作后关闭阅读器。
  • 我不明白。如果我们没有对文件对象的引用,并且我们完成了从中读取行 - 我的意思是,我们不再在 for 的范围内,那么 python 的垃圾收集器必须清理它,对吗?还是不行?

标签: python file-io scope


【解决方案1】:

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

虽然对象本身可能被垃圾回收回收并关闭,但垃圾回收发生的时间并没有确定的时间。

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

【讨论】:

    【解决方案2】:

    当相应的对象被释放时,文件将关闭。您提供的样本取决于此;没有对该对象的引用,因此将删除该对象并关闭该文件。

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

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2013-03-11
      • 1970-01-01
      相关资源
      最近更新 更多