在评论中这个问题 https://stackoverflow.com/questions/38234224/learning-python-the-hard-way-ex-17-i-got-the-one-liner-but?关于Python单行代码,我突然想到我不知道Python如何处理匿名文件对象。从问题来看:
open(to_file, 'w').write(open(from_file).read())
有两个电话open
不使用with
关键字(这通常是我处理文件的方式)。我过去曾使用过这种未命名的文件。 IIRC,文件上似乎存在剩余的操作系统级锁定,该锁定将在一两分钟后过期。
那么这些文件句柄会发生什么情况呢?它们被垃圾收集清理了吗?通过操作系统?当 Python 机器和文件发生什么情况时close()
被调用,当脚本完成并经过一段时间后,这一切都会发生吗?
监视 Linux 上的文件描述符(通过检查 /proc/$$/fds)和 Windows 上的文件句柄(使用 SysInternals 工具),似乎该文件在语句后立即关闭。
然而,这不能保证,因为垃圾收集器必须执行。在我所做的测试中,它每次都会立即关闭。
The with
建议与语句一起使用open
,但是真正需要它的场合很少。很难演示一个场景,您可以must use with
,但为了安全起见,这可能是个好主意。
所以你的一句话就变成了:
with open(to_file, 'w') as tof, open(from_file) as fof:
tof.write(fof.read())
优点with
是特殊方法(在 io 类中)称为__exit__()
保证*被调用。
* 除非你做了类似的事情os._exit()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)