开放与

opening & closing file without file object in python

使用文件对象打开和关闭文件:

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

如果要打开和关闭文件而不使用文件对象,即

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

我们需要写close("poem.txt")还是写close()可以?

他们都没有犯错…

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


对于内存中的每个对象,python都保持引用计数。只要周围不再有对象的引用,它将被垃圾收集。

open()函数返回一个文件对象。

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

在上面的一行中,在变量f中保持对对象的引用,因此文件对象保持存在。如果你愿意的话

1
del f

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

但是,如果你只是这样做:

1
open("myfile.txt")

然后创建文件对象并立即再次丢弃,因为没有对它的引用。它不见了,关了。你不能再关闭它,因为你不能确切地说出你想关闭什么。

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

为了计算整个表达式,首先调用open,它返回一个文件对象,然后对该对象调用方法readlines。然后返回结果。由于现在没有对文件对象的引用,因此将立即再次丢弃该对象。


如果我正确理解这个问题,我会使用with open(...)。这个答案可能会帮助您使用python关键字"with"是什么?.


为了回答你的实际问题…文件对象(当您调用open时返回的内容)具有对其中文件的引用。所以当你做如下的事情时:

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

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

更好的结构

1
2
with open(myfile,'w') as fp:
    fp.write(...)

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