在完成所需任务(读取,计算并生成outfile)后,我必须删除提取到临时目录中的tiff文件。
附加一个tiff文件的以下错误不允许删除文件,并停止程序:
WindowsError: [Error 32] The process cannot access the file because it is being used by another process
否则工作代码如下:
import os, glob, subprocess, gdal, numpy as np
files = glob.glob('*.txt')
temp_dir = 'E:\\td\\'
for r in files:
fi = open (r, 'r')
files = fi.read().splitlines()
winrar = 'C:\\Program Files\\WinRAR\\Rar.exe'
extracts = [subprocess.call([winrar, 'x', f, temp_dir],shell=True) for f in files]
fi.close()
tiff_files = glob.glob(temp_dir + '*.tif')
inrasters = [gdal.Open(i) for i in tiff_files]
data = np.array([e.GetRasterBand(1).ReadAsArray().astype(np.float32) for e in inrasters])
data_mean = np.mean(data, axis=0)
outdriver = gdal.GetDriverByName('GTiff')
outraster = outdriver.Create('..\\outfile.tif',5000,5000,1,gdal.GDT_Float32)
outraster.GetRasterBand(1).WriteArray(data_mean)
inrasters, outraster = None, None
for x in tiff_files:
os.remove(x)
非常沮丧,因为我无法弄清楚应用程序正在使用哪个文件,以及如何解决它。任何想法都将受到高度赞赏。
答案 0 :(得分:3)
尝试在删除循环之前添加它:
del e
显然,行inrasters, outraster = None, None
是尝试关闭文件,但仅当inrasters
是对文件的唯一引用时才有效。构建data
的列表理解将e
作为对最后一个文件的引用。
答案 1 :(得分:1)
您需要先关闭文件,然后才能删除它们。关闭最后两行之前的所有打开文件。