当前位置: 首页 > 知识库问答 >
问题:

Python GC也关闭文件吗?

公良鸿光
2023-03-14

考虑下面这段Python(2.x)代码:

for line in open('foo').readlines():
    print line.rstrip()

我假设,由于打开的文件仍然未被引用,因此必须自动关闭。我读过Python中的垃圾收集器,它释放由未使用的对象分配的内存。GC是否也足够处理这些文件?

共有1个答案

叶稳
2023-03-14

摘自文档(python 3.6):

如果您没有使用with关键字,那么您应该调用f.close()来关闭文件,并立即释放它使用的所有系统资源。如果您没有显式关闭文件,Python的垃圾收集器最终将销毁对象并为您关闭打开的文件,但该文件可能会保持打开一段时间。另一个风险是不同的Python实现将在不同的时间进行这种清理。

因此,是的,文件将自动关闭,但为了控制进程,您应该自己关闭,或者使用with语句:

with open('foo') as foo_file:
    for line in foo_file.readlines():
        print line.rstrip()
 类似资料:
  • 问题内容: 考虑下面的Python(2.x)代码: 我假设由于打开的文件仍然未被引用,因此必须自动关闭它。我已经阅读了有关Python中的垃圾收集器的信息,该垃圾收集器可释放未使用对象分配的内存。GC是否也足以处理文件? 问题答案: 取自文档(python 3.6): 如果未使用with关键字,则应调用f.close()关闭文件并立即释放文件使用的所有系统资源。如果您未明确关闭文件, Python

  • 的JavaDoc没有说明关闭底层: https://docs.oracle.com/javase/8/docs/api/java/io/inputstreamreader.html#close-- 从类复制的描述:Reader 关闭流并释放与之关联的任何系统资源。一旦流关闭,进一步的read()、ready()、mark()、reset()或skip()调用将引发IOException。关闭以前关

  • JavaDoc for没有提到关闭底层的: https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#close-- 从课堂上复制的描述:Reader 关闭流并释放与之关联的所有系统资源。流关闭后,进一步的read()、ready()、mark()、reset()或skip()调用将抛出IOException。

  • defer 关键字(参看 6.4)对于在函数结束时关闭打开的文件非常有用,例如下面的代码片段: func data(name string) string { f, _ := os.OpenFile(name, os.O_RDONLY, 0) defer f.Close() // idiomatic Go code! contents, _ := ioutil.ReadAl

  • 问题内容: 我是python的新手,到目前为止,我爱ipython笔记本进行学习。我是否使用to_csv()函数将pandas数据帧写出到文件中。我想打开csv来查看它在excel中的外观,并且只能以只读模式打开,因为它仍在被另一个用户使用。如何关闭文件? 这将写出文件没有问题,但是当我在excel中“检查”它时,我得到了只读警告。这也给我提出了一个更大的问题。有没有办法查看python当前正在使

  • 本文向大家介绍c# 实现子窗口关闭父窗口也关闭的方法,包括了c# 实现子窗口关闭父窗口也关闭的方法的使用技巧和注意事项,需要的朋友参考一下 其实是窗口间通讯的问题,在form1上打开form2 ,form2 关闭时关闭form1 实现方法: 在子窗口form2中声明事件: 然后在它的关闭事件中触发本事件: 在父窗口form1中(比如登陆窗口中): 然后弹出子form2窗体的地方这样写: 以上这篇c