Экспорт модели в Python
Экспорт модели в скрипт 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"):
pass # Additional code
Если модель содержит подмодели, их содержание будет экспортировано в отдельные подпапки. Исходный файл Python корректно импортирует и вызывает файл под-модели Python в процессе выполнения кода.
Слои и представления таблиц
Если в модели используются слои или представления таблиц, которые не создавались в этой модели, вам необходимо предусмотреть создание этих слоев и представлений таблиц в скрипте с помощью таких инструментов, как Создать векторный слой и Создать представление таблицы.
Проверка
Элементы данных из модели преобразуются в переменные в скрипте Python. Имена переменных с неподдерживаемыми символами, такими как [({*^%$#@!&*,.";:/\, проверяются, чтобы исключить неподдерживаемые символы. Значения переменных с неподдерживаемыми символами будут сохранены как есть. Избегайте именования элементов данных с использованием ключевых слов, зарезервированных Python ,например, class, global и return. Полный список зарезервированных ключевых слов, используемых модулем Python keyword см. в свойстве kwlist.
- Имена переменных с неподдерживаемыми символами, такими как
Input Features A_ [({*^%$#@!&*,.";:/\, проверяются вInput_Features_A_. Значения переменных с неподдерживаемыми символами будут сохранены как есть, напримерInput_Features_A_ = "A_ [({*^%$#@!&*,.\";:/\\". Избегайте именования элементов данных, которое несовместимо с Python (например,class,globalиreturn). Полный список зарезервированных ключевых слов, используемых модулем Pythonkeywordсм. в свойствеkwlist.
Подстановка переменных
Модели, содержащие замену встроенной переменной, будут экспортированы в Python, как описано ниже:
Подстановка встроенных переменных, например
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%, переносятся как строки.Переменная с заменой встроенной переменной и установленная как параметр модели будет оцениваться с помощью встроенных функций Python
locals(),globals()иisinstance()при экспорте в Python, например:arcpy.analysis.Buffer(in_features=_Name_.__str__().format(**locals(),**globals())if isinstance(_Name_, str) else _Name_, out_feature_class=Name_Buffer, buffer_distance_or_field="10 Meters")
Типы данных
Типы данных в модели при экспорте в Python сопоставляются так, как показано ниже:
Типы данных переменных модели String, Long, Double и Boolean соответствуют типам данных в Python. Все другие типы данных в коде Python будут представлены строками.
Значения параметра Таблица значений соответствуют списку, например:
arcpy.analysis.Statistics(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.analysis.Buffer(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.analysis.Buffer(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.management.JoinField(in_data=infc, in_field="Type", join_table=joinTable, join_field="Type", fields=["Year"])[0]