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"):

モデルにサブモデルが含まれていた場合、それらのサブモデルの内容は、別々のサブフォルダーにエクスポートされます。 プライマリ Python ファイルは、コード実行中に、サブモデルの Python ファイルを正常にインポートして呼び出します。

エクステンション

エクステンションの要件を持つツールのために、CheckOutExtension 関数が追加されます。

レイヤーとテーブル ビュー

モデルが、モデル内で作成していないレイヤーやテーブル ビューを使用する場合、[フィーチャ レイヤーの作成 (Make Feature Layer)][テーブル ビューの作成 (Make Table View)] などのツールを使用して、それらのレイヤーやテーブル ビューをスクリプト内に作成する必要があります。

検証

モデルのデータ エレメントは、Python スクリプト内の変数に変換されます。 互換性のない文字 ([({*^%$#@!&*,.";:/\ など) を含む変数名が整合チェックされ、互換性のない文字が除外されます。 互換性のない文字を含む変数値は、そのまま保持されます。 データ エレメントに Python の予約済みのキーワードとなっている名前 (classglobalreturn など) を付けないようにします。 予約済みキーワードを一覧表示するには、Pythonkeyword モジュールの kwlist プロパティを使用してください。

  • 互換性のない文字を含む変数名 (Input Features A_ [({*^%$#@!&*,.";:/\ など) が整合チェックされ、Input_Features_A_ になります。 互換性のない文字を含む変数値は、そのまま保持されます (Input_Features_A_ = "A_ [({*^%$#@!&*,.\";:/\\" など)。 データ エレメントに Python と互換性のないの名前 (classglobalreturn など) を付けないようにします。 予約済みキーワードを一覧表示するには、Pythonkeyword モジュールの kwlist プロパティを使用してください。

変数置換

  • [属性検索 (Select Layer By Attribute)] などのツールの式の設定におけるインライン変数置換 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"])
  • フィールド マッピング パラメーター ([アペンド (Append)] ツールの [フィールド マップ] パラメーターなど) は、次のように、セミコロン区切りの文字列に変換されます。
    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 にエクスポートされます。 エクスポートされるスクリプトは、with ブロック内の EnvManager クラスを使用して環境を設定しますが、この環境設定値は一時的なもので、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]