前言

我在之前的博客园博客里,阐述了如何编写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

以上思路或许还有更加优秀的解决办法,欢迎牛人大佬朋友下方留言交流。

批处理文件 .bat 并行Arcpy脚本提高效率的思路-提升版的更多相关文章

  1. 批处理文件(.bat)并行Arcpy脚本提高效率的思路

    Arcpy提供数据处理的方便接口,但一个Arcpy脚本通常只运行于一个核上.现在电脑通常是多核乃至多处理器,如果能将任务分解为可同时进行的若干任务,便可通过并行充分利用电脑性能. 折腾了python并 ...

  2. UVA12325-注意提高效率的思路

    题目大意:你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号的整数.你的任务是最多能装多少价值的宝物?   方法:其实也没 ...

  3. .Net cxy 提高效率

    Visual Studio Visual Studio Productivity Power tool: VS 专业版的效率工具. Web Essentials: 提高开发效率,能够有效的帮助开发人员 ...

  4. 利用mock提高效率

    利用mock提高效率 谈到mock,就不得不讲前后端分离.理想情况下前后端不分离,由全栈的人以product和infrastructure的维度进行开发,效率是最高的.近些年来业务的复杂度越来越高,真 ...

  5. sql的简单提高效率方法

    少用in操作(效率极差),尽量用表关联代替 select要指定列,不要*(*会读入所有数据,而指定列则只提取涉及的列,减少io) 尽量有where(减少读取量),where操作列尽量有索引(加快查询) ...

  6. 【转】.NET程序员提高效率的70多个开发工具

    原文:.NET程序员提高效率的70多个开发工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件 ...

  7. cmake:善用find_package()提高效率暨查找JNI支持

    cmake提供了很多实用的cmake-modules,通过find_package()命令调用这些modules,用于写CMakeLists.txt脚本时方便的查找依赖的库或其他编译相关的信息,善用这 ...

  8. .NET程序员提高效率的70多个开发工具

    工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各个环节, ...

  9. 让你提高效率的 Linux 技巧

    想要在 Linux 命令行工作中提高效率,你需要使用一些技巧. 巧妙的 Linux 命令行技巧能让你节省时间.避免出错,还能让你记住和复用各种复杂的命令,专注在需要做的事情本身,而不是你要怎么做.以下 ...

随机推荐

  1. 消息抽象层设计和实现-OSS.DataFlow

    前面已经介绍了消息生产消费中间类库(OSS.DataFlow)的简单使用,这篇主要介绍内部的设计实现.主要内容包含: 1. 消息生产消费的抽象设计. 2. 具体使用示例 一. 消息生产消费的抽象设计. ...

  2. CF713C Sonya and Problem Wihtout a Legend

    考虑我们直接选择一个暴力\(dp\). \(f_{i,j} = min_{k<=j}\ (f_{i - 1,k}) + |a_i - j|\) 我们考虑到我们直接维护在整个数域上\(min(f_ ...

  3. Codeforces 1464F - My Beautiful Madness(树的直径)

    Codeforces 题面传送门 & 洛谷题面传送门 树上数据结构大杂烩(?) 首先考虑什么样的点能够在所有路径的 \(d\) 邻居的交集内.显然如果一个点在一条路径的 \(d\) 邻居内则必 ...

  4. 基因组共线性分析工具MCScanX

    软件简介 MCScanX工具集对MCScan算法进行了调整,用于检测共线性和同线性区域,还增加了可视化和下游分析..MCscanX有三个核心工具,以及12个下游分析工具. 软件安装 进入官网http: ...

  5. 【R方差分析】蛋白质表达量多组比较

    初始数据类似: 蛋白质组数据虽不是严格的正态分布,但目前最常用的检验方法还是T检验(两组比较)和方差分析(多组比较).这个话题值得深究,这里不展开. 主要是求多个蛋白的Pvalue值或FDR,用于差异 ...

  6. 腾讯云联合中国信通院&作业帮等首发《降本之源-云原生成本管理白皮书》

    在11月4日举办的2021腾讯数字生态大会云原生专场上,腾讯云联合中国信通院.作业帮等率先在国内重磅发布了<降本之源-云原生成本管理白皮书>(简称白皮书),基于腾讯云在业内最大规模的 Ku ...

  7. 大数据学习day31------spark11-------1. Redis的安装和启动,2 redis客户端 3.Redis的数据类型 4. kafka(安装和常用命令)5.kafka java客户端

    1. Redis Redis是目前一个非常优秀的key-value存储系统(内存的NoSQL数据库).和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list ...

  8. Redis的持久化机制:RDB和AOF

    什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示: 这样做有什么问题呢? 其实,只要稍微有点计算 ...

  9. NSURLSession实现文件上传

    7.1 涉及知识点(1)实现文件上传的方法 /* 第一个参数:请求对象 第二个参数:请求体(要上传的文件数据) block回调: NSData:响应体 NSURLResponse:响应头 NSErro ...

  10. Dubbo消费者异步调用Future使用

    Dubbo的四大组件工作原理图,其中消费者调用提供者采用的是同步调用方式.消费者对于提供者的调用,也可以采用异步方式进行调用.异步调用一般应用于提供者提供的是耗时性IO服务 一.Future异步执行原 ...