使用gdal打开geotiff等栅格文件后,若未显式关闭数据集(如`dataset = none`或`dataset.flushcache()`),操作系统会持续锁定文件,导致后续`os.remove()`报错“the process cannot access the file because it is being used by another process”。
在GDAL中,调用 gdal.Open() 返回的是一个 Dataset 对象(例如 Band1_ds),该对象在Python中被引用时,底层C++驱动会保持对文件的独占访问(尤其在Windows系统上)。仅将读取后的数组变量(如 Band1)设为 None 并不能释放文件句柄——真正需要置为 None 的是原始的 Dataset 对象本身。
在你的代码中,你创建了 Band1_ds, Band2_ds, Band3_ds, Band4_ds 等变量,但在后续清理阶段却只执行了:
Band1 = None Band2 = None Band3 = None Band4 = None
而遗漏了关键的:
Band1_ds = None Band2_ds = None Band3_ds = None Band4_ds = None
✅ 正确做法是在所有 ReadAsArray() 操作完成后、执行 os.remove() 之前,显式解除对 Dataset 对象的引用。GDAL官方文档明确指出:dataset = None 是推荐的关闭方式(等价于 dataset.FlushCache() + 释放资源)。