データの有無の確認
スクリプトでデータが存在するかどうか確認するには、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 from arcpy import env 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 from arcpy import env env.workspace = "Database Connections/Bluestar.sde" fc = "ORASPATIAL.Rivers" # Confirm that the feature class exists # if arcpy.Exists(fc): print "Verified %s exists" % fc
スクリプトの場合、デフォルト設定でどのツールも既存の出力を上書きしないようになっています。この振舞いを変更するには、overwriteOutput プロパティを True に設定します(arcpy.env.overwriteOutput = True)。overwriteOutput を False の状態で上書きしようとすると、ツールの実行に失敗します。