创建新 Python 脚本
要保存 Python 代码,可创建 Python 文件 (.py)。这些文件属于包含 Python 语句的 ASCII 文件。
- 在您选择的 Python 集成开发环境 (IDE) 中创建新脚本,并在脚本顶部添加以下行:
- 用来定义待处理的那组要素类的输入工作空间
- 通过裁剪工具对输入要素类进行裁剪的区域的要素类
- 写入裁剪工具结果的输出工作空间
- 裁剪工具使用的 XY 容差
- 将以下代码添加到脚本中,以便根据执行期间传递给脚本的用户定义值来定义和设置变量:
- 将以下错误处理语句和 ArcPy 的 ListFeatureClasses() 函数添加到脚本窗口中:
- 添加以下代码:
- 添加以下各行完成脚本:
- 将以下标题添加到脚本顶部:
- 保存脚本。
# Import ArcPy site-package and os modules
import arcpy
import os
这会将 ArcPy 站点包和操作系统模块 os 导入脚本中。os 模块可用于轻松访问操作系统的最基本工具。本脚本中使用了一些 os 模块的文件名操作方法。
该脚本将采用以下四个参数,以便实现通用:
# Set the input workspace
arcpy.env.workspace = arcpy.GetParameterAsText(0)
# Set the clip featureclass
clipFeatures = arcpy.GetParameterAsText(1)
# Set the output workspace
outWorkspace = arcpy.GetParameterAsText(2)
# Set the XY tolerance
clusterTolerance = arcpy.GetParameterAsText(3)
try:
# Get a list of the featureclasses in the input folder
fcs = arcpy.ListFeatureClasses()
Python 强制要求将某些语句后的代码缩进作为该语句的组成部分。try 语句定义代码块的开始,该代码块将由与其相关的异常处理程序或 except 语句处理。该块中的所有代码均须缩进。Python 使用 try/except 块来处理执行期间的意外错误。异常处理程序定义在系统或脚本本身引起异常时,该程序应执行哪些操作。异常处理还可使脚本适当地退出,并且返回信息性消息而不是产生系统错误消息。
ListFeatureClasses() 函数用于返回当前工作空间中要素类名称的列表。如果未指定完整路径,该工作空间会定义数据的位置以及创建所有新数据的位置。该工作空间已被设置为第一个参数的值。for 循环用于遍历列表中包含的各个要素类。
for fc in fcs:
# Validate the new feature class name for the output workspace.
featureClassName = arcpy.ValidateTableName(fc, outWorkspace)
outFeatureClass = os.path.join(outWorkspace, featureClassName)
# Clip each feature class in the list with the clip feature class.
# Do not clip the clipFeatures, it may be in the same workspace.
if fc != os.path.basename(clipFeatures):
arcpy.Clip_analysis(fc, clipFeatures, outFeatureClass,
clusterTolerance)
当列表中不再有名称时,for 循环结束。ValidateTableName() 函数用于确保输出名称对输出空间有效。某些字符(如句点或虚线)在地理数据库中是不允许的,因此该方法返回的是用有效字符取代无效字符后的名称。此外,它返回的是唯一名称,因此不会覆盖任何现有数据。
os.path.basename 方法用于处理裁剪要素类的路径,因此在表达式中仅对要素类名称求值,而不是整个路径。通过使用各种字符串变量作为参数值,裁剪工具可作为 ArcPy 函数进行访问。
except Exception as err:
arcpy.AddError(err)
print err
前面的 try 语句要求有 except 语句;否则将出现语法错误。如果执行期间出现错误,则会执行 except 块中的代码。如果通过脚本工具运行脚本,则使用 AddError() 函数添加任意错误消息。另外,在工具范围外运行脚本时,还会将所有错误消息打印至标准输出中。
"""-----------------------------------------------------------------------------
Script Name: Clip Multiple Feature Classes
Description: Clips one or more shapefiles
from a folder and places the clipped
feature classes into a geodatabase.
Created By: Insert name here.
Date: Insert date here.
-----------------------------------------------------------------------------"""
命名变量时,请注意 Python 区分大小写,因此 clipFeatures 与 ClipFeatures 不同。
GetParameterAsText() 用于接收参数。如果脚本使用已定义的数据集名称和参数值,则可能不需要使用 GetParameterAsText() 函数。
以冒号结尾的语句指示缩进代码的开始。Python 不使用大括号、括号或分号指示代码块的开始或结束。而是使用块缩进定义其边界。这样便使代码易于读写。
完整代码:
"""-----------------------------------------------------------------------------
Script Name: Clip Multiple Feature Classes
Description: Clips one or more shapefiles
from a folder and places the clipped
feature classes into a geodatabase.
Created By: Insert name here.
Date: Insert date here.
-----------------------------------------------------------------------------"""
# Import ArcPy site-package and os modules
import arcpy
import os
# Set the input workspace
arcpy.env.workspace = arcpy.GetParameterAsText(0)
# Set the clip featureclass
clipFeatures = arcpy.GetParameterAsText(1)
# Set the output workspace
outWorkspace = arcpy.GetParameterAsText(2)
# Set the XY tolerance
clusterTolerance = arcpy.GetParameterAsText(3)
try:
# Get a list of the featureclasses in the input folder
fcs = arcpy.ListFeatureClasses()
for fc in fcs:
# Validate the new feature class name for the output workspace.
featureClassName = arcpy.ValidateTableName(fc, outWorkspace)
outFeatureClass = os.path.join(outWorkspace, featureClassName)
# Clip each feature class in the list with the clip feature class.
# Do not clip the clipFeatures, it may be in the same workspace.
if fc != os.path.basename(clipFeatures):
arcpy.Clip_analysis(fc, clipFeatures, outFeatureClass,
clusterTolerance)
except Exception as err:
arcpy.AddError(err)
print err