批处理文件 .bat 并行Arcpy脚本提高效率的思路-提升版
2024-09-02 12:36:15
前言
我在之前的博客园博客里,阐述了如何编写Arcpy脚本,如何利用Windows bat批处理脚本同时打开多个cmd窗口,以实现并行处理,提高数据处理效率。但是上述博客仍然存在着:1、需要编写多个Arcpy脚本;2、参数修改麻烦。最近做了一些修改,解决了上述问题。现进行分享。
Arcpy脚本
借鉴知乎批处理教程,脚本分为运行参数准备函数定义、Arcpy掩膜提取函数定义、循环实现三大部分。
导入库
import arcpy
from arcpy.sa import *
import time, os, glob, sys
函数定义
首先定义运行参数准备函数,将所有输入输出参数存储到一个嵌套列表中,方便掩膜提取函数调用。然后定义掩膜提取函数。
# 函数用于准备掩膜提取工具运行参数
def pre_parameter(inpath, outpath, mask):
parameters = []
infiles = glob.glob("*.tif")
for infile in infiles:
inRaster = infile
inMaskData = mask
outRaster = os.path.join(outpath, infile)
parameter = [inRaster, inMaskData, outRaster]
parameters.append(parameter)
return parameters
# Arcpy函数掩膜提取
def Extract_by_Mask(Parameter):
# Set local variables
inRaster = Parameter[0]
inMaskData = Parameter[1]
outRaster = Parameter[2]
# Execute ExtractByMask
outExtractByMask = ExtractByMask(inRaster, inMaskData)
# Save the output
outExtractByMask.save(outRaster)
print(outRaster, 'has finshed')
循环实现
利用sys.argv语句获取命令行输入的参数,调用pre_parameter函数生成掩膜提取函数运行参数列表。然后利用for循环,根据start与end处理特定文件数。通过多个cmd窗口打开多个脚本分别运行,便可以同时处理多个文件,提高效率。本例中,若只运行一个脚本需要70多个小时,同时运行7个脚本只需要10个小时左右。
inpath = os.path.abspath(sys.argv[1])
outpath = os.path.abspath(sys.argv[2])
inf = os.path.abspath(sys.argv[3]) # 掩膜文件,可以是shp或者raster
# 这里根据处理的文件数量改动,可以分几部分打开多个shell运行多个脚本提高速度
start = int(sys.argv[4])
end = int(sys.argv[5])
os.chdir(inpath)
# Set the current workspace
arcpy.env.workspace = (inpath)
# Set the snapRaster
arcpy.env.snapRaster = (inf)
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
para = pre_parameter(inpath, outpath, inf)
StartTime = time.time()
print('start Mask from %d to %d'%(start, end))
for i in range(start, end):
time1 = time.time()
Extract_by_Mask(para[i])
time2 = time.time()
print(i, 'has finished! costed ' + str(time2 - time1) + ' Seconds...',)
EndTime = time.time()
print('Elapsed: ' + str(EndTime - StartTime) + ' Seconds...')
批处理(.bat)脚本
第一句要设置为你的Arcpy python.exe所在完整路径。要完全按照顺序依次输入: inpath(输入路径), outpath(输出路径), inf(掩膜文件), start(第一个处理文件的编号), end(最后一个处理文件的编号)
命令的具体含义请参考参考这篇博客 。
:: change your work folder to the path of arcpy
cd/d D:\Python27\ArcGIS10.4
:: open some cmd and run the script
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 0 5
:: time delay
choice /t 5 /d y
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 5 10
choice /t 5 /d y
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 10 16
以上思路或许还有更加优秀的解决办法,欢迎牛人大佬朋友下方留言交流。
最新文章
- Git 进阶指南
- TCPDF 6.0.036 发布,PHP 的 PDF 操作包
- 通过mongodb客户端samus代码研究解决查询慢问题
- ggplot绘图学习笔记
- hihoCoder挑战赛14 -1223
- eWebeditor编辑器上传图片的设置程序
- Oracle ->;>; 随机函数
- 使用GDB生成coredump文件【转载】
- 记reinforcement learning double DQNS
- java结合testng,利用mysql数据库做数据源的数据驱动实例
- PKUWC2019垫底记
- JavaScript实现全屏显示
- DER、CRT、CER、PEM格式的证书及转换
- Linux 命令之mv
- debezium sql server 集成
- mysql之pymsql的使用
- 主席树初步学习笔记(可持久化数组?静态区间第k大?)
- sql 中延时操作
- Zabbix监控PostgreSQL
- Expression表达式树 案例
热门文章
- 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushConsumer的实现原理及源码分析
- Jetpack架构组件学习(2)——ViewModel和Livedata使用
- [CF707 Div2, A ~ D]
- JOI 2020 Final 题解
- 【基因组组装】HiC挂载Juicebox纠错补充
- Linux Alpine安装 Nginx
- R语言与医学统计图形-【30】流行病学数据可视化
- SQL-join(inner join)、left join、right join、full join
- Redis源码解析(1)
- 亿级Web系统搭建:单机到分布式集群