Python原子写文件:with块结束后访问tempfile对象是否可靠?
原子写文件中with语句后访问fp对象的可靠性分析
你的代码里,with语句结束后访问fp.name是完全可靠的,不是侥幸。
原因很简单:with语句的作用是管理上下文,当代码块执行完毕时,它会调用文件对象的close()方法,但并不会立刻销毁fp这个对象本身——Python的对象销毁由垃圾回收机制决定,在你后续访问fp.name的代码执行时,fp对象仍然存在于内存中,它的属性自然可以正常访问。
不过有个小细节可以优化:既然已经用了pathlib,可以直接在with块内把临时文件的路径存下来,彻底消除对fp对象在with块外的依赖,代码可读性和鲁棒性会更好:
import os from pathlib import Path import tempfile def atomic_write(f: Path, data: bytes) -> None: with tempfile.NamedTemporaryFile(dir=f.parent, delete=False) as fp: temp_path = Path(fp.name) fp.write(data) fp.flush() os.fsync(fp.fileno()) temp_path.replace(f)
内容的提问来源于stack exchange,提问作者os_user
相关产品推荐
相关产品推荐

