免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3030 | 回复: 4
打印 上一主题 下一主题

问个文件关闭的小问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-16 11:07 |只看该作者 |倒序浏览
有人用:
fn = open('xxx.txt').read()
有人用:
fn = open('xxx.txt')
data = fn.read()
fn.close()


有个地方我不太明白..用fn = open('xxx.txt').read()的不用去关闭文件吗???不用close是否有释放资源??

论坛徽章:
0
2 [报告]
发表于 2009-12-16 11:19 |只看该作者
一行写是不需要关闭,但是在多线程环境下可能会出错。
所以不建议这样做。就多写一行。

我记得看DBUtils里面就提到了类似的问题,其实就是connect的问题,一行也可以搞定。

论坛徽章:
0
3 [报告]
发表于 2009-12-16 11:38 |只看该作者
fn = open('xxx.txt').read()得到的是一个string。

这一行命令,打开文件,进行读取,并将内容返回给fn。
Python在这过程中确实打开了文件句柄,但是当这行结束时,这个文件句柄完成了任务,也没有被任何变量保留。
所以它被垃圾回收了,自然文件也就被正确关闭了。

具体请参考:
DiveIntoPython
5.4.1 Garbage Collection
Example 6.7

论坛徽章:
0
4 [报告]
发表于 2009-12-16 11:48 |只看该作者
原帖由 松饼熊 于 2009-12-16 11:38 发表
fn = open('xxx.txt').read()得到的是一个string。

这一行命令,打开文件,进行读取,并将内容返回给fn。
Python在这过程中确实打开了文件句柄,但是当这行结束时,这个文件句柄完成了任务,也没有被任何变 ...

但是回收并不是立即的。所以还是手动关闭一下。

论坛徽章:
0
5 [报告]
发表于 2009-12-16 12:11 |只看该作者
会立刻关闭,引用计数为0的时候会调用dealloc,fileobject的file_dealloc里会执行关闭文件的,不立刻执行的是回收内存池里的这部分内存
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP