You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用tempfile.NamedTemporaryFile时临时文件意外提前删除问题

问题根本原因

tempfile.NamedTemporaryFile 实例的默认行为是:当实例本身被Python垃圾回收机制回收时,会自动删除关联的临时文件,不需要你主动调用关闭操作。

你当前的代码仅保存了临时文件的路径字符串,没有保留NamedTemporaryFile实例本身:每次循环迭代结束后,上一次迭代创建的tmp实例会被新迭代的值覆盖,没有任何变量持有旧实例的引用,旧实例会被立刻回收,对应的临时文件也就被自动删除了。这就是你只能看到最近一个临时文件的原因。

符合需求的解决方案

你不需要设置delete=False,也不需要手动删除文件,只要修改代码,保留所有NamedTemporaryFile实例的引用即可:只要这些实例在脚本运行期间一直被持有,临时文件就不会被提前删除;脚本运行结束进程销毁时,所有实例被自动回收,关联的临时文件也会被自动清理,完全匹配你希望临时文件仅在脚本运行周期存在的要求。

修改后的参考代码:

import tempfile
# 新增列表存储临时文件实例,维持引用避免被回收
tmp_instances = []
tmp_files = []
for i in range(40):
    tmp = tempfile.NamedTemporaryFile(suffix=".txt")
    with open(tmp.name, "w") as f:
        f.write(str(i))
    tmp_instances.append(tmp)
    tmp_files.append(tmp.name)

string = ""
for tmp_file in tmp_files:
    with open(tmp_file, "r") as f:
        data = f.read()
    string += data
print(string)

内容的提问来源于stack exchange,提问作者Alejandro Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:36:04