开放与在python中关闭没有文件对象的文件

时间:2014-02-27 13:31:00

标签: python

开幕式&使用文件对象关闭文件:

fp=open("ram.txt","w")
fp.close()

如果我们想打开&关闭文件而不使用文件对象,即;

open("ram.txt","w")

我们需要写close("poem.txt")还是写close()没问题?

他们都没有提出任何错误......

只编写close(),它如何理解我们引用的文件?

3 个答案:

答案 0 :(得分:9)

对于内存中的每个对象,Python保留引用计数。只要没有对周围对象的引用,它就会被垃圾收集。

open()函数返回文件对象

f = open("myfile.txt", "w")

在上面的行中,您在变量f中保留对对象的引用,因此文件对象保持存在。如果你这样做

del f

然后文件对象不再有引用,并将被清除。它将在此过程中关闭,但这可能需要一段时间,这就是为什么最好使用with构造。

但是,如果您这样做:

open("myfile.txt")

然后创建文件对象并立即再次丢弃,因为没有对它的引用。它消失了,关闭了。你不能关闭它,因为你无法说出你想要关闭的是什么。

open("myfile.txt", "r").readlines()

要评估整个表达式,首先调用open,它返回一个文件对象,然后调用方法readlines。然后返回结果。由于现在没有对文件对象的引用,它会立即再次丢弃。

答案 1 :(得分:3)

如果我正确理解了问题,我会使用with open(...)。 这个答案可能对您What is the python keyword "with" used for?有帮助。

答案 2 :(得分:1)

回答你的实际问题......一个文件对象(当你调用open时得到的内容)有对其中文件的引用。所以,当你做类似的事情时:

fp = open(myfile, 'w')
fp.write(...)
fp.close()

上述所有内容(包括writeclose)都知道它们引用myfile,因为这是与fp相关联的文件。我不确定fp.close(myfile)实际上做了什么,但它在打开后肯定不需要文件名。

这样的更好的结构
with open(myfile,'w') as fp:
    fp.write(...)

不要改变这个;在这种情况下,fp也是一个上下文管理器,但仍包含指向myfile的指针;没有必要提醒它。