创建新 Python 脚本

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

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

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

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

    • 用来定义待处理的那组要素类的输入工作空间
    • 通过裁剪工具对输入要素类进行裁剪的区域的要素类
    • 写入裁剪工具结果的输出工作空间
    • 裁剪工具使用的 XY 容差
  3. 将以下代码添加到脚本中,以便根据执行期间传递给脚本的用户定义值来定义和设置变量:
  4. # 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)
    
  5. 将以下错误处理语句和 ArcPy 的 ListFeatureClasses() 函数添加到脚本窗口中:
  6. try:
        # Get a list of the featureclasses in the input folder
        fcs = arcpy.ListFeatureClasses()
    

    Python 强制要求将某些语句后的代码缩进作为该语句的组成部分。try 语句定义代码块的开始,该代码块将由与其相关的异常处理程序或 except 语句处理。该块中的所有代码均须缩进。Python 使用 try/except 块来处理执行期间的意外错误。异常处理程序定义在系统或脚本本身引起异常时,该程序应执行哪些操作。异常处理还可使脚本适当地退出,并且返回信息性消息而不是产生系统错误消息。

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

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

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

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

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

    命名变量时,请注意 Python 区分大小写,因此 clipFeaturesClipFeatures 不同。

    注注:

    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

相关主题

5/10/2014