Создание нового скрипта Python
Для хранения кода на языке Python создаются файлы Python (.py). Эти файлы являются файлами ASCII, которые содержат стандартные выражения Python. В следующих шагах предполагается использования приложения PythonWin, как описано в разделе Написание скриптов Python.
- В PythonWin откройте меню Файл (File) и выберите Создать (New). Примите опцию по умолчанию Скрипт Python (Python Script) и нажмите кнопку OK.
- Нажмите кнопку Развернуть (Maximize) в окне Script1.
- В меню Файл (File) выберите Сохранить как (Save As). Назовите скрипт multi_clip.py и сохраните его в любой выбранной папке.
- Добавьте в начало скрипта следующие строки:
- Входная рабочая область, определяющая набор классов пространственных объектов для обработки
- Класс пространственных объектов, который будет использоваться инструментом Вырезание (Clip) в качестве области, вырезаемой из входного класса пространственных объектов
- Выходная рабочая область, в которую будут записаны результаты применения инструмента Вырезание (Clip).
- Допуск XY, который будет использоваться инструментом Вырезание (Clip)
Подробные сведения о том, как работает инструмент Вырезание (Clip), см. в описании инструмента Вырезание (Clip) из набора инструментов Анализ (Analysis).
- Добавьте в скрипт следующий код для определения и установки переменных на основе определяемых пользователями значений, передаваемых в скрипт при выполнении:
- Добавьте в окно скрипта следующую инструкцию по обработке ошибок и функцию ArcPy ListFeatureClasses():
- Добавьте следующий код:
- Добавьте следующие строки, чтобы завершить скрипт:
- Добавьте следующие комментарии в начало скрипта:
- Сохраните скрипт, нажав кнопку Сохранить (Save) на панели инструментов PythonWin.
Откроется окно Script1. Script1 — имя скрипта по умолчанию.
# 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() возвращает список Python с именами классов пространственных объектов в текущей рабочей области. Рабочая область определяет расположение данных и место, в котором будут создаваться все новые данные, если не указан полный путь. В качестве рабочей области уже установлено значение первого аргумента. Список Python является универсальным объектом. Для прохождения по каждому классу пространственных объектов, содержащемуся в списке, используется цикл 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() используется для обеспечения корректности выходного имени для выходной рабочей области. Некоторые символы, например точки или дефисы, недопустимы в базах геоданных, поэтому данный метод возвращает имя с допустимыми символами на месте недопустимых. Также он возвращает уникальное имя, предотвращая перезапись существующих данных.
Метод basename из os.path используется для операций с путем к классу пространственных объектов вырезания, позволяя вычислять в выражении только имя класса пространственных объектов, а не весь путь. Инструмент Вырезание (Clip) доступен в виде функции ArcPy с использованием различных строковых переменные в качестве значений параметров.
except:
arcpy.AddMessage(arcpy.GetMessages(2))
print arcpy.GetMessages(2)
Инструкция except является обязательной после предыдущего употребления инструкции try; в противном случае возникнет синтаксическая ошибка. Если в процессе выполнения возникнет ошибка, будет выполнен код из блока except. Любые сообщения со значением серьезности 2, указывающие на ошибку, добавляются в случае запуска скрипта из инструмента-скрипта. Все сообщения об ошибках также выводятся через стандартный интерфейс вывода в случае, если скрипт запускается вне инструмента.
# 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 в разделах Выполнение и отладка скриптов 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)