上篇文章【Arcpy】相邻时相栅格数据批量作差的代码构建针对的是同一文件夹下的栅格文件,在env.workspace中设置工作空间,使用ListRasters获取栅格列表然后利用Python切片功能构造相邻文件作差的效果
本篇将解决不同文件夹下栅格文件的提取,以及代码构建过程和常见bug处理
需求
两个文件夹分别有地温和气温,求其对应日期的差,同时要注意单位换算和栅格大小
代码
# coding=utf-8
# 不同文件夹数据囧计算
import arcpy
from arcpy.sa import *
import glob
import os
output_path = r'H:\240329\LSTmiTa201703\tset'
input_path1 = r'H:\240329\Clip_LST201703\*.tif'
input_path2 = r'H:\240329\Tavg201703\*.img' # 这里最好不要把反斜杠放最后,文章会解释
rasterlist1 = glob.glob(input_path1)
rasterlist2 = glob.glob(input_path2) # 使用glob.glob提取到List
print len(rasterlist1)
print len(rasterlist2)
arcpy.env.cellSize = "MINOF" # 规定以最小的栅格图像为栅格大小
for raster1name, raster2name in zip(rasterlist1, rasterlist2):
raster1 = arcpy.Raster(raster1name)
raster2 = arcpy.Raster(raster2name)
outRaster = (raster1 - 27315) * 0.01 - (raster2 * 0.1)
output_name = output_path + "\\LSTmiTavg" + os.path.basename(raster2name)[6:13] + ".tif" #反斜杠在这里加 而且raster2name是包括路径的名字 所以要用basenane提取一下
outRaster.save(output_name)
print str(raster1)
print str(raster2)
print("\n")
print("OK!")
debug过程
- 栅格不存在或不受支持
最早的代码直接设定了两个不同的workspace然后分别提取ListRasters,但是后续会出现栅格文件不存在,因为此时已经是raster2的文件夹作为workspace所以找不到raster1,传递的参数仅仅是basename的string而不是文件本身 - rasterlist为空
原来的代码规定文件路径如下:
output_path = r'H:\240329\LSTmiTa201703\tset\ '
input_path1 = r'H:\240329\Clip_LST201703\*.tif '
input_path2 = r'H:\240329\Tavg201703\*.img '
output_path末尾有空格,如果没有空格会报错,因为’是单引号的转义字符,尽管前面有了RAWr
来表示不用转义字符。。。。。。
而有空格之后就会造成文件路径问题
这导致我以为字符串引号前必须有空格,,,,所以input两个变量也画蛇添足导致glob不能识别文件,进而rasterlist为空值
- 新文件命名
保存栅格时,使用了raster2name[6:13]
来获取日期字符串的一部分,但是这里raster2name是完整路径+文件名,为了提高鲁棒性,改成了os.path.basename(raster2name)[6:13]
,这样可以无视不同文件夹长度了
感谢文心一言,终于有点用了