Wil*_*ill 5 python filesystems file
在这个关于 python one-liner 的问题的评论中,我突然想到我不知道 python 如何处理匿名文件对象。从问题:
open(to_file, 'w').write(open(from_file).read())
Run Code Online (Sandbox Code Playgroud)
有两个open不使用with关键字的调用(这通常是我处理文件的方式)。我过去曾使用过这种未命名的文件。IIRC,文件上似乎有一个剩余的操作系统级锁,该锁会在一两分钟后过期。
那么这些文件句柄会发生什么?他们是通过垃圾收集清理的吗?通过操作系统?当close()被调用时 Python 机器和文件会发生什么,当脚本完成并经过一段时间后,这一切都会发生吗?
监视 Linux 上的文件描述符(通过检查 /proc/$$/fds)和 Windows 上的文件句柄(使用 SysInternals 工具),似乎文件在语句后立即关闭。
然而,这不能保证,因为垃圾收集器必须执行。在我所做的测试中,它每次都会立即关闭。
该with语句建议与 一起使用open,但实际需要的场合很少。很难演示必须使用的场景with,但为了安全起见,这可能是一个好主意。
所以你的单线变成:
with open(to_file, 'w') as tof, open(from_file) as fof:
tof.write(fof.read())
Run Code Online (Sandbox Code Playgroud)
的优点是保证with调用的特殊方法(在 io 类中)__exit__()被调用。
*除非你做类似的事情os._exit()。
| 归档时间: |
|
| 查看次数: |
683 次 |
| 最近记录: |