データの有無の確認

スクリプトでデータが存在するかどうか確認するには、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
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 の状態で上書きしようとすると、ツールの実行に失敗します。

関連トピック

5/10/2014