【python】只对文件open,不close的后果
2017-11-30 10:36
260 查看
这个问题的主要目的是研究当程序中没有显示close掉已经open的文件,那么这个文件会在什么时候被close掉?
已经知道在C++中,打开的文件句柄没有被close掉的话,那这个句柄只会在程序退出时才会被释放掉,那么在python是否也是这样的呢?接下来做个实验:
1.有如下代码:
执行此脚本结果如下:
没有任何问题;
2.将代码稍作改动,将 handle = open(filePath, 'wb') 替换为 self.handle = open(filePath, 'wb'),执行结果如下:
结论:由以上的表现可以得知,在第一个程序里由于handle是一个临时的变量(对象),在函数openfile退出时,handle对象被释放了,同时也把文件句柄给关闭了;而在第二个程序里,self.handle不再是一个临时的对象,因此在openfile退出时就没有释放句柄,因此就无法删除test.txt这个文件了;
这里也可以猜测一下,在python里,open返回的是一个类似C++里智能指针的东西,这样就做到了handle释放时关闭文件句柄;不过从编程规范上来说,还是主动调用close来关闭文件句柄吧(注意这里指的是用with,一个比较pythonic的方式,如>>> with open(r'test1.txt','a') as handler:
... handler.write('with'))
已经知道在C++中,打开的文件句柄没有被close掉的话,那这个句柄只会在程序退出时才会被释放掉,那么在python是否也是这样的呢?接下来做个实验:
1.有如下代码:
import os class OpenFileTest: def openfile(self, filePath): handle = open(filePath, 'wb') pass if __name__ == "__main__": t = OpenFileTest() filePath = 'test.txt' t.openfile(filePath) os.remove(filePath) print 'success'
执行此脚本结果如下:
没有任何问题;
2.将代码稍作改动,将 handle = open(filePath, 'wb') 替换为 self.handle = open(filePath, 'wb'),执行结果如下:
结论:由以上的表现可以得知,在第一个程序里由于handle是一个临时的变量(对象),在函数openfile退出时,handle对象被释放了,同时也把文件句柄给关闭了;而在第二个程序里,self.handle不再是一个临时的对象,因此在openfile退出时就没有释放句柄,因此就无法删除test.txt这个文件了;
这里也可以猜测一下,在python里,open返回的是一个类似C++里智能指针的东西,这样就做到了handle释放时关闭文件句柄;不过从编程规范上来说,还是主动调用close来关闭文件句柄吧(注意这里指的是用with,一个比较pythonic的方式,如>>> with open(r'test1.txt','a') as handler:
... handler.write('with'))
相关文章推荐
- 【体会Python之美】【文件】file,open,read,readline,readlines,write,close
- python3 文件系统 open, close, write 方法
- 文件操作编程一(open、close、read、write、lseek函数的使用)
- 重温python之OS模块的简单使用7:os.open(), os.write(), os.close()的使用
- Python 用OPEN读文件报错 ,路径以及r
- linux文件操作open close read write lseek
- Python open()函数文件打开、读、写操作详解
- Python open()文件处理使用介绍
- 使用Python读取C语言.so文件-: libmysqlclient.so.16: cannot open shared object file: No such file o
- Python open读写文件实现脚本
- python:open/文件操作
- 19_Linux文件IO的打开和关闭--open/close
- python中操作文件函数open的简单操作实例
- 文件I/O编程 (open、read、write、lseek、close)
- 【python学习02】- open读写文件
- Linux基础编程-文件操作open,lseek,read,write,close
- python:open 文件操作
- 零基础学python-2.17 文件、open()、file()
- 去除文件中的重复元素后写入文件 分类: python 小练习 open()文件读写 2013-12-03 11:21 356人阅读 评论(0) 收藏
- [Python入门]使用open打开文件一直为空