前面说过,f=open,它涉及到两方面的资源,一方面是这个变量所占的内存空间,这个内存空间我们要进行回收,就直接del f就可以了。
del f
它是解除变量名f与它对应的值的绑定关系,这样这个变量值就变成了垃圾,被垃圾回收机制回收了。
这是回收应用程序的资源。
然后还有一方面就是操作系统打开的这个具体的文件所占的内存空间,这个内存空间我们也要进行回收,如果我们不回收,操作系统就会一直维护着打开的这个文件。
所以我们还要干一件事,就是f.close()。
f.close()
这是在操作f这个文件对象,这也就相当于向操作系统发出请求,让操作系统把刚刚打开的这个文件关掉,这是回收操作系统的资源。
但是我们这样写的话就会有一个问题,我们前面已经用了del解除了f和变量值的绑定关系了,这个文件对象已经被回收了。
后面又要用到f来调用这个close()这个功能,很明显这样是调用不到的,所以我们要在这个变量还在的时候就告诉操作系统,让操作系统帮我们把这个文件关掉。
然后再del f。
f.close()
del f
但是通常我们不会主动来做这一步,你会发现前面写程序,也没有说定义了一个变量,然后后面不用了再把它del一下。
这一步不用自己来做,交给python的垃圾回收机制就可以了。
现在我只是给你们讲原理。
f这个文件对象所占的内存空间,其实也就跟我们前面正常定义一个整型变量1、24、100所占的内存空间都差不多。
我们后面把这个f用在其他地方的时候,这个值自然也就被回收了。
所以我们后面写程序的时候,不用考虑应用程序的资源回收问题,只需要考虑操作系统的资源回收问题就好了。
因为操作系统的资源回收问题,python的垃圾回收机制管不了,而且操作系统能够同时打开的问价数量也是有限的。
当然我们以后做一些比较大型的项目的话,我们会把操作系统的限制改大一些,因为你的操作系统再被大量用户同时访问的时候,很多用户都涉及到操作你的硬盘,打开你的文件。
这样就会有问题,你的操作系统可能会同时打开几千几万个文件,这时候你的应用程序性能将就下降了。
这时候很多用户可能就访问不到你的资源了。
当然操作系统的限制改大也不是无限改大的。
如果你就是头铁,不想关闭文件,操作系统就会过一段时间扫描一遍,看看有没有不用的文件,然后它也会帮你关掉。
但是这个文件在被操作系统主动关闭之前,它对电脑的性能也是一种消耗。
所以关闭文件这一步非常重要。
现在我们来运行一下。
f = open('date/a.txt', mode='rt') # 相对路径
res = f.read()
print(res)
f.close()
del f
打印出来好像是乱码了,这个问题很好解决,根据前面我们学过的字符编码知识,知道这只要指定字符编码就能解决的。
未经允许不得转载:445IT之家 » 零基础Python到全栈-关闭文件