要保存 Python 代码,可创建 Python 文件 ( .py )。这些文件属于包含 Python 语句的 ASCII 文件。

  1. 在您选择的 Python 集成开发环境 (IDE) 中创建新脚本,并在脚本顶部添加以下行:
    # Import ArcPy site-package and os modules
    import arcpy 
    import os
    

    这会将 ArcPy 站点包和操作系统模块 os 导入脚本中。 os 模块可用于轻松访问操作系统的最基本工具。本脚本中使用了一些 os 模块的文件名操作方法。

    该脚本将采用以下四个参数,以便实现通用:

    • 用来定义待处理的那组要素类的输入工作空间
    • 通过 裁剪 工具对输入要素类进行裁剪的区域的要素类
    • 写入 裁剪 工具结果的输出工作空间
    • 裁剪 工具使用的 XY 容差
  2. 将以下代码添加到脚本中,以便根据执行期间传递给脚本的用户定义值来定义和设置变量:
  3. # 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)
    
  4. 将以下错误处理语句和 ArcPy 的 ListFeatureClasses() 函数添加到脚本窗口中: # Get a list of the featureclasses in the input folder fcs = arcpy.ListFeatureClasses()
  5. Python 强制要求将某些语句后的代码缩进作为该语句的组成部分。 try 语句定义代码块的开始,该代码块将由与其相关的异常处理程序或 except 语句处理。该块中的所有代码均须缩进。Python 使用 try / except 块来处理执行期间的意外错误。异常处理程序定义在系统或脚本本身引起异常时,该程序应执行哪些操作。异常处理还可使脚本适当地退出,并且返回信息性消息而不是产生系统错误消息。

    ListFeatureClasses() 函数用于返回当前工作空间中要素类名称的列表。如果未指定完整路径,该工作空间会定义数据的位置以及创建所有新数据的位置。该工作空间已被设置为第一个参数的值。 for 循环用于遍历列表中包含的各个要素类。

  6. 添加以下代码:
  7. 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 函数进行访问。

  8. 添加以下各行完成脚本:
  9. except Exception as err:
        arcpy.AddError(err)
        print err
    

    前面的 try 语句要求有 except 语句;否则将出现语法错误。如果执行期间出现错误,则会执行 except 块中的代码。如果通过脚本工具运行脚本,则使用 AddError() 函数添加任意错误消息。另外,在工具范围外运行脚本时,还会将所有错误消息打印至标准输出中。

  10. 将以下标题添加到脚本顶部:
  11. """-----------------------------------------------------------------------------
      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.
    -----------------------------------------------------------------------------"""
    
  12. 保存脚本。

完整代码:

"""-----------------------------------------------------------------------------
  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

相关主题