使用tempfile生成临时文件后调用os.replace报PermissionError问题排查
解决os.replace时的PermissionError问题
嗨,这个问题我熟!你的os.replace用法本身没问题,但报错的核心原因是临时文件还处于打开状态时就尝试替换——Windows系统下,文件被进程占用时是不允许被替换或删除的。
看你的代码,os.replace写在了with语句的缩进块里,这时候temp这个临时文件的句柄还没被释放(with块还没执行完,文件不会自动关闭),自然就触发了权限错误。
你只需要把替换操作移到with块外面就行,等with结束后,临时文件和原文件的句柄都会被自动关闭,这时候再执行替换就不会有问题了。
修改后的代码如下:
import os import tempfile file_path = "你的目标文件路径" basename = os.path.basename(file_path) dirname = os.path.dirname(file_path) with tempfile.NamedTemporaryFile(mode='w', prefix=basename, dir=dirname, delete=False) as temp, open(file_path, 'r') as f: for line in f: temp.write(line + " test") # with块结束后,两个文件都已关闭,此时执行替换 os.replace(temp.name, file_path)
顺便提一句,你设置delete=False是完全正确的——默认情况下临时文件关闭后会被自动删除,而你需要保留它来完成替换,这部分做得没问题~
内容的提问来源于stack exchange,提问作者GohanP
相关产品推荐
相关产品推荐

