別のロジックで大量に作成したラスター データセット(画像ファイル)が ArcGIS で正しく認識できるかどうかを検品するために作成しました。ファイル ジオデータベースのラスター データセットが認識できないことは無いはずなので対象外です。
#ArcGIS が認識できないラスター データセットをログに出力
#パラメーター
#input_dir:ラスター データセットが含まれる親フォルダー パス(サブ フォルダーを再帰的に検索)
#log_file :出力ログ ファイル(フルパス)
#file_ext :検査したいラスター データセットの拡張子(ジオデータベースのラスター データセットは検査不可)
#備考
#繰り返し実行した場合、ログは上書きではなく追記されます
#環境
#ArcMap 10.4.1 もしくは ArcGIS Pro 2.1 で動作を確認
import os
import logging
import arcpy
#検索ディレクトリ
input_dir = r'D:\GIS\SpatialData\Data\Rasters'
log_file = r'D:\GIS\SpatialData\Data\Rasters\CheckTIFFs.log'
file_ext = 'tif'
#再帰的に指定フォルダー以下のファイルを特定拡張子で検索する関数
def walk_files_with(directory='', extension = ''):
for root, dirnames, filenames in os.walk(directory):
for filename in filenames:
if filename.lower().endswith(''+extension):
yield os.path.join(root,filename)
#ログ ファイル保存処理
fh = logging.FileHandler(log_file)
logger = logging.getLogger('log')
logger.setLevel(logging.ERROR) #記録するログ レベル
logger.addHandler(fh)
logger.handlers
#処理
for file in walk_files_with(input_dir, file_ext):
try:
desc = arcpy.Describe(file)
bandCount = desc.bandCount #TIFF ファイルのバンド数取得
print('OK:{0}'.format(file)) #ファイル認識正常時
except:
print('NG:{0}'.format(file)) #ファイル認識異常時
logger.log(logging.ERROR, 'NG:{0}'.format(file)) #ファイル認識異常時にログ ファイル出力
print('処理が終了しました。')
ダウンロード
ダウンロード後、拡張子を py に変更して使用してください。
