Python中tempfile临时文件复制与操作问题求助
解决Python临时文件复制时的进程占用问题
方案一:使用NamedTemporaryFile并保留文件
tempfile.TemporaryFile在Windows下默认生成无可见文件名的临时文件,且文件被打开时处于独占锁定状态。改用NamedTemporaryFile并设置delete=False,可创建带可见文件名的临时文件,关闭后不会自动删除,操作完成后手动清理即可。
示例代码:
import tempfile import os import shutil # 创建保留文件名的临时文件 with tempfile.NamedTemporaryFile(delete=False) as f: f.write(b"Testing code") # 确保缓冲区内容写入磁盘,避免复制到空文件 f.flush() # 执行复制操作(此时文件已关闭,无进程占用冲突) shutil.copy(f.name, "./test_copy.txt") # 手动删除临时文件,完成清理 os.unlink(f.name)
方案二:直接复制文件对象(无需关闭文件)
如果不想提前关闭临时文件,可以用shutil.copyfileobj直接复制打开的文件对象,绕开对文件名的系统级访问,从根本上避免锁定冲突。
示例代码:
import tempfile import shutil f = tempfile.TemporaryFile() try: f.write(b"Testing code") # 移到文件开头,准备读取内容 f.seek(0) # 直接将临时文件的内容复制到目标文件 with open("./test_copy.txt", "wb") as target: shutil.copyfileobj(f, target) finally: # 关闭临时文件,自动触发删除 f.close()
原代码报错原因
在Windows系统中,tempfile.TemporaryFile创建的文件会被当前进程独占锁定,此时用os.system调用系统copy命令,外部进程无法访问该文件。而如果调用close(),TemporaryFile会立即删除文件,导致后续操作找不到目标。
内容的提问来源于stack exchange,提问作者sathishkumar P
相关产品推荐
相关产品推荐

