ArcGIS が認識できないラスター データセットをログに出力

 2018/7/9 (月)    

別のロジックで大量に作成したラスター データセット(画像ファイル)が 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('処理が終了しました。')

ダウンロード

CheckTIFFs.py.txt

ダウンロード後、拡張子を py に変更して使用してください。

Copyright© WINGFIELD since1981 , 2018 All Rights Reserved.