データの有無の確認

スクリプトの中でデータが存在するかどうか確認するには、Exists 関数を使用します。

Exists(dataset)

フィーチャクラス、テーブル、データセット、シェープファイル、ワークスペース、レイヤーなどのファイルが、スクリプトの実行時点で現在のワークスペースに存在するかどうかを確認します。この関数は、その要素が存在するかどうかを示すブール値を返します。

Exists 関数

地理データが存在するかどうかを確認する場合には、Exists 関数を使用します。これは、この関数がカタログ パスを認識するからです。カタログ パスは、ArcGIS のみが認識するパスの名前です。以下に例を示します。 D:\Data\Final\Infrastructure.gdb\EastValley\powerlines は、ファイル ジオデータベース InfrastructureEastValley フィーチャ データセット内にある、powerlines フィーチャクラスを示しています。これは、Windows オペレーティング システムから見ると有効なシステム パスではありません。Infrastructure.gdb(フォルダー) に Infrastructure という名前のファイルは含まれていないからです。つまり、Windows はフィーチャ データセットやフィーチャクラスを認識しないので、os.path.exists のように Python の存在を確認する関数を使用することはできません。当然ながら、ArcGIS ではすべての機能がカタログ パスを適切に処理できます。UNC (Universal Naming Convention) パスを使用することもできます。

import arcpy

arcpy.env.workspace = "d:/St_Johns/data.gdb"
fc = "roads"

# Clip a roads feature class if it exists
#
if arcpy.Exists(fc):
   arcpy.Clip_analysis(fc, "urban_area", "urban_roads")
ヒント:

Exists 関数はジオプロセシング ワークスペースの環境を適用するので、この環境にあるデータについてはベース名を指定するだけでかまいません。

データがエンタープライズ ジオデータベースに存在する場合は、完全修飾名を使用しなければなりません。

import arcpy

arcpy.env.workspace = "Database Connections/Bluestar.sde"
fc = "ORASPATIAL.Rivers"

# Confirm that the feature class exists
#
if arcpy.Exists(fc): 
    print("Verified {} exists".format(fc))

スクリプトの場合、デフォルト設定でどのツールも既存の出力を上書きしないようになっています。この振舞いは、overwriteOutput プロパティを True(arcpy.env.overwriteOutput = True) に設定することで変更できます。overwriteOutputFalse の場合に上書きしようとすると、ツールでエラーが発生します。