我刚开始使用 ArcPy 通过 ArcGIS 分析地理数据。分析有不同的步骤,要一个接一个地执行。
这是一些伪代码:
import arcpy
# create a masking variable
mask1 = "mask.shp"
# create a list of raster files
files_to_process = ["raster1.tif", "raster2.tif", "raster3.tif"]
# step 1 (e.g. clipping of each raster to study extent)
for index, item in enumerate(files_to_process):
raster_i = "temp/ras_tem_" + str(index) + ".tif"
arcpy.Clip_management(item, '#', raster_i, mask1)
# step 2 (e.g. change projection of raster files)
...
# step 3 (e.g. calculate some statistics for each raster)
...
etc.
到目前为止,这段代码运行得非常好。但是,光栅文件很大,一些步骤需要很长时间才能执行(5-60 分钟)。因此,我只想在输入栅格数据发生变化时执行这些步骤。从 GIS 工作流程的角度来看,这应该不是问题,因为每一步都会在硬盘上保存一个物理结果,然后将其用作下一步的输入。
我想如果我想暂时禁用例如步骤 1,我可以简单地#
在这一步的每一行前面放一个。但是,在实际分析中,每个步骤可能有很多行代码,因此我更愿意将每个步骤的代码外包到一个单独的文件中(例如“step1.py”、“step2.py”、.. .),然后执行每个文件。
我尝试过execfile(step1.py)
,但收到错误NameError: global name 'files_to_process' is not defined
。似乎主脚本中定义的变量不会自动传递给execfile
.
我也试过这个,但我收到了与上面相同的错误。
我是一个完全的 Python 新手(正如您可能通过滥用任何与 Python 相关的表达式而发现的那样),我将非常感谢有关如何组织这样一个 GIS 项目的任何建议。