Создание нового скрипта Python

Для хранения кода на языке Python создаются файлы Python (.py). Эти файлы являются файлами ASCII, которые содержат стандартные выражения Python. В следующих шагах предполагается использования приложения PythonWin, как описано в разделе Написание скриптов Python.

Шаги:
  1. В PythonWin откройте меню Файл (File) и выберите Создать (New). Примите опцию по умолчанию Скрипт Python (Python Script) и нажмите кнопку OK.
  2. Откроется окно Script1. Script1 — имя скрипта по умолчанию.

  3. Нажмите кнопку Развернуть (Maximize) в окне Script1.
  4. В меню Файл (File) выберите Сохранить как (Save As). Назовите скрипт multi_clip.py и сохраните его в любой выбранной папке.
  5. Добавьте в начало скрипта следующие строки:
  6. # Import ArcPy site-package and os modules
    #
    import arcpy 
    import os
    

    Это импортирует в скрипт пакет сайтов ArcPy и модуль операционной системы os. Модуль os предоставляет легкий доступ к наиболее фундаментальным инструментам операционной системы. В этом скрипте используются некоторые методы работы с именами файлов из модуля os.

    Для универсального использования данного скрипта в нем имеются следующие четыре аргумента.

    • Входная рабочая область, определяющая набор классов пространственных объектов для обработки
    • Класс пространственных объектов, который будет использоваться инструментом Вырезание (Clip) в качестве области, вырезаемой из входного класса пространственных объектов
    • Выходная рабочая область, в которую будут записаны результаты применения инструмента Вырезание (Clip).
    • Допуск XY, который будет использоваться инструментом Вырезание (Clip)

      Подробные сведения о том, как работает инструмент Вырезание (Clip), см. в описании инструмента Вырезание (Clip) из набора инструментов Анализ (Analysis).

  7. Добавьте в скрипт следующий код для определения и установки переменных на основе определяемых пользователями значений, передаваемых в скрипт при выполнении:
  8. # 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)
    
  9. Добавьте в окно скрипта следующую инструкцию по обработке ошибок и функцию ArcPy ListFeatureClasses():
  10. try:
        # Get a list of the featureclasses in the input folder
        #
        fcs = arcpy.ListFeatureClasses()
    

    Python принудительно применяет структурированное расположение кода после определенных инструкций, что составляет часть языка. Инструкция try определяет начало блока кода, который будет обрабатываться связанным с ним обработчиком исключений — инструкцией except. Весь код в пределах этого блока должен быть указан с отступом. В Python используются блоки try и except для обработки непредвиденных ошибок во время выполнения. Обработчики исключений определяют, что следует делать программе при выдаче исключения системой или самим скриптом. Обработку исключений рекомендуется использовать в любом скрипте с применением геопроцессора, чтобы его сообщения об ошибках передавались обратно пользователю. Это также позволит скрипту незаметно завершать работу и возвращать информативные сообщения вместо того, чтобы просто вызвать системную ошибку.

    Функция ListFeatureClasses() возвращает список Python с именами классов пространственных объектов в текущей рабочей области. Рабочая область определяет расположение данных и место, в котором будут создаваться все новые данные, если не указан полный путь. В качестве рабочей области уже установлено значение первого аргумента. Список Python является универсальным объектом. Для прохождения по каждому классу пространственных объектов, содержащемуся в списке, используется цикл for.

  11. Добавьте следующий код:
  12. 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() используется для обеспечения корректности выходного имени для выходной рабочей области. Некоторые символы, например точки или дефисы, недопустимы в базах геоданных, поэтому данный метод возвращает имя с допустимыми символами на месте недопустимых. Также он возвращает уникальное имя, предотвращая перезапись существующих данных.

    Метод basename из os.path используется для операций с путем к классу пространственных объектов вырезания, позволяя вычислять в выражении только имя класса пространственных объектов, а не весь путь. Инструмент Вырезание (Clip) доступен в виде функции ArcPy с использованием различных строковых переменные в качестве значений параметров.

  13. Добавьте следующие строки, чтобы завершить скрипт:
  14. except:
        arcpy.AddMessage(arcpy.GetMessages(2))
        print arcpy.GetMessages(2)
    

    Инструкция except является обязательной после предыдущего употребления инструкции try; в противном случае возникнет синтаксическая ошибка. Если в процессе выполнения возникнет ошибка, будет выполнен код из блока except. Любые сообщения со значением серьезности 2, указывающие на ошибку, добавляются в случае запуска скрипта из инструмента-скрипта. Все сообщения об ошибках также выводятся через стандартный интерфейс вывода в случае, если скрипт запускается вне инструмента.

  15. Добавьте следующие комментарии в начало скрипта:
  16. # 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.
    
  17. Сохраните скрипт, нажав кнопку Сохранить (Save) на панели инструментов PythonWin.
  18. Завершенный выше скрипт используется для более детального изучения использования Python в разделах Выполнение и отладка скриптов Python и Настройка точек останова с помощью Python.

    ПримечаниеПримечание:

    При именовании переменных следует помнить, что Python чувствителен к регистру, поэтому имя clipFeatures не равнозначно ClipFeatures.

    ПримечаниеПримечание:

    GetParameterAsText() используется для получения аргументов. Если в скрипте используются определенные имена наборов данных и значения параметров, возможно, в нем не понадобится использовать функцию GetParameterAsText().

    ПримечаниеПримечание:

    Инструкции, которые оканчиваются двоеточием, указывают начало кода с отступом. В Python не используются фигурные скобки, обычные скобки и точка с запятой для обозначения начала или окончания кода блока. Вместо этого в 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:
    arcpy.AddMessage(arcpy.GetMessages(2))
    print arcpy.GetMessages(2)

Связанные темы

9/11/2013