Экспорт модели в скрипт Python позволяет лучше понять, как используются в Python инструменты и параметры среды. Для экспорта модели в Python, щелкните кнопку Экспорт на ленте ModelBuilder и выберите одну из следующих опций:
- Экспорт в файл Python
- Отправить в окно Python
Обе опции создают одинаковый код Python. Впоследствии код можно отредактировать и использовать в автономном скрипте Python, или настроить для работы в качестве инструмента-скрипта.
Процесс экспорта модели в скрипт Python
При экспорте модели в скрипт Python учитываются некоторые факторы, которые позволяют адаптировать модель и превратить ее в код Python. Ниже приводится описание этих факторов.
Перезаписать
По умолчанию, модель, которая экспортируется в скрипт Python задает для свойства overwriteOutput значение False. Для возможности перезаписи какого-либо выходного набора данных установите свойство arcpy.env.overwriteOutput на True.
Организация кода
При экспорте в скрипт модель экспортируется как функция, а значения параметров превращаются в аргументы, например:
def Model(InputFC=r"C:\Data.gdb\inFC", Output="C:\Output.gdb\outFC", Extent="1186925.51155726 -2378062.72079588 1240005.19719053 -2315230.04252389", Name="Canada Goose"):
Если модель включает под-модели, их содержимое экспортируется в отдельные подпапки. Исходный файл Python корректно импортирует и вызывает файл под-модели Python в процессе выполнения кода.
Дополнительные модули
Функция CheckOutExtension добавляется для инструментов, которые требуют лицензии дополнительных модулей.
Слои и представления таблиц
Если в модели используются слои или представления таблиц, которые не создавались в этой модели, вам необходимо предусмотреть создание этих слоев и представлений таблиц в скрипте с помощью таких инструментов, как Создать векторный слой и Создать представление таблицы.
Проверка
Элементы данных из модели преобразуются в переменные в скрипте Python. Имена переменных с неподдерживаемыми символами, такими как [({*^%$#@!&*,.";:/\ проверяются, чтобы исключить неподдерживаемые символы. Значения переменных с неподдерживаемыми символами будут сохранены как есть. Избегайте именования элементов данных с использованием ключевых слов, зарезервированных Python,например, class, global и return. Чтобы увидеть полный список зарезервированных ключевых слов, используйте в модуле keyword Python свойство kwlist.
- Имена переменных с неподдерживаемыми символами, такими как Входные объекты A_ [({*^%$#@!&*,.";:/\ проверяются и переименовываются как Input_Features_A_. Значения переменных с неподдерживаемыми символами будут сохранены как есть., например Input_Features_A_ = "A_ [({*^%$#@!&*,.\";:/\\". Избегайте именования элементов данных, которое несовместимо с Python (например, class, global и return). Чтобы увидеть полный список зарезервированных ключевых слов, используйте в модуле keyword Python свойство kwlist.
Подстановка переменных
- Подстановка встроенных переменных, например Type = '%Name%' в конструкторе выражений для инструментов типа Выбрать в слое по атрибуту, экспортируется как where_clause=f"Type = '{Name}'".
- Подстановка встроенной переменной для рабочей области %Output Workspace%\a или %scratchGDB%\b будет экспортирована как OutputFC = fr"{Output_Workspace}\a" и OutputFC = fr"{arcpy.env.scratchGDB}\b".
- Системные встроенные переменные, такие как %n%, %i% переносит как строки.
Типы данных
- Типы данных переменных модели String, Long, Double и Boolean соответствуют типам данных Python. Все другие типы данных в коде Python будут представлены строками.
- Значения параметра Таблица значений соответствуют спискам, например:
arcpy.Statistics_analysis(in_table=a, out_table=b, statistics_fields=[["Type", "COUNT"], ["Year", "COUNT"]], case_field=["Type"])
- Параметры сопоставления полей, например параметр Список полей в инструменте Присоединить конвертируются в строки с разделителем точка с запятой, как в примере ниже:
field_mapping="Type \"Type\" true true false 20 Text 0 0,First,#,InputFC,Type,0,20;Year \"Year\" true true false 2 Short 0 0,First,#,InputFC,Year,-1,-1)
Параметры среды
Только настройки параметров среды, измененные по сравнению со значениями по умолчанию, будут экспортированы в Python для приложения, модели или инструмента. Экспортируемый скрипт устанавливает параметры среды с использованием класса EnvManager в блоке with; настройки параметров среды временные, и действуют только во время исполнения блока with.
import arcpy
def GnatcatcherHabitat(): # Gnatcatcher Habitat
# Model Environment settings
with arcpy.EnvManager(extent="3434731.64703611 -1534445.99025604 3485825.15860115 -1466080.56806995")
# Process: Buffer (Buffer)
with arcpy.EnvManager(extent="1187538.76766617 -2377527.90888239 1230418.76331601 -2319961.0344503")
arcpy.Buffer_analysis(in_features=r"C:\Data.gdb\A", out_feature_class=r"C:\Output.gdb\B", buffer_distance_or_field="500 Meters", line_side="FULL", line_end_type="ROUND", dissolve_option="NONE",dissolve_field=[], method="PLANAR")
if __name__ == '__main__':
# Global Environment settings
with arcpy.EnvManager(scratchWorkspace=r"C:\Output.gdb\", workspace=r"C:\Data.gdb\"):
GnatcatcherHabitat()
Поток в модели
- Предварительные условия модели преобразовываются в блок if:
if a and b: arcpy.Buffer_analysis(in_features=inFC, out_feature_class=outFC, buffer_distance_or_field="10 Meters", line_side="FULL", line_end_type="ROUND", dissolve_option="NONE", dissolve_field=[], method="PLANAR")
- Циклы обратной связи переносятся как потоки скрипта.
Инструменты модели
Инструменты модели, такие как Итераторы, Утилиты или Логические не экспортируются в Python. Для использования функционала этих инструментов необходимо добавить соответствующие функции Python. Например, следует использовать логику if/else, чтобы реализовать ветвление по условию в скрипте.
Производные выходные данные
Производные выходные данные назначаются переменным путем индексирования объекта Result инструмента геообработки, в частности:
output = arcpy.JoinField_management(in_data=infc, in_field="Type", join_table=joinTable, join_field="Type", fields=["Year"])[0]