使用WindowsError(错误32)删除临时文件时非常令人沮丧的行为

时间:2014-02-27 12:10:57

标签: python numpy scipy gdal

在完成所需任务(读取,计算并生成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)

非常沮丧,因为我无法弄清楚应用程序正在使用哪个文件,以及如何解决它。任何想法都将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

尝试在删除循环之前添加它:

 del e

显然,行inrasters, outraster = None, None是尝试关闭文件,但仅当inrasters是对文件的唯一引用时才有效。构建data的列表理解将e作为对最后一个文件的引用。

答案 1 :(得分:1)

您需要先关闭文件,然后才能删除它们。关闭最后两行之前的所有打开文件。