スクリプトの中でデータが存在するかどうか確認するには、Exists 関数を使用します。
Exists(dataset) | フィーチャクラス、テーブル、データセット、シェープファイル、ワークスペース、レイヤーなどのファイルが、スクリプトの実行時点で現在のワークスペースに存在するかどうかを確認します。この関数は、その要素が存在するかどうかを示すブール値を返します。 |
地理データが存在するかどうかを確認する場合には、Exists 関数を使用します。これは、この関数がカタログ パスを認識するからです。カタログ パスは、ArcGIS のみが認識するパスの名前です。以下に例を示します。 D:\Data\Final\Infrastructure.gdb\EastValley\powerlines は、ファイル ジオデータベース Infrastructure の EastValley フィーチャ データセット内にある、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) に設定することで変更できます。overwriteOutput が False の場合に上書きしようとすると、ツールでエラーが発生します。