ArcGIS Online や Portal for ArGIS にコンピューター上のファイルをアイテムとして登録する際は、サイトにつきユニークなファイル名でなければいけません。
例えば、Vricon 3D という製品の i3s (*.spk) ファイルは、ポータルから登録するアップローダーのファイルサイズ上限がある関係で、購入範囲がタイル上に分割されています。分割された地域はフォルダーに分類されますが、i3s ファイルはすべて同じ「vricon_i3s.spk」というファイル名になります。そこで、このファイルをユニークな名称にバッチ処理する方法を考えました。
以下のコードを実行することで、自動的にフォルダー名を元にファイルをリネームします。タイル分割されたファイルはフォルダーでユニークな番号で連番されるのですが、連番は0で桁埋めされていないため、それも考慮しています。
#coding:cp932 #Vricon 3D i3s ファイルをリネームしてディレクトリに再配置 #例 # XXXXXXXXXXXXX = 地域を分割するためのユニークな名称 # YYY = タイル分割を示す #元のファイル(例) # D:\theFolder\XXXXXXXXXXXXX\vricon_3d_surface_model_i3s\pYYY\vricon_3d_surface_model_i3s\data\vricon_i3s.spk #移動先(例) # D:\theFolder\XXXXXXXXXXXXX\vricon_3d_surface_model_i3s\vricon_i3s_XXXXXXXXXXXXX_pYYY.spk #パラメーター #検索ディレクトリー input_dir = r"D:\theFolder\XXXXXXXXXXXXX\vricon_3d_surface_model_i3s" #対象拡張子 input_ext = ".spk" #出力フォルダー output_dir = input_dir #出力ファイルの接頭辞 output_prefix = "vricon_i3s" #地域の分類を示すフォルダー階層 dir_region = 2 #タイルの分割を示すフォルダー階層 dir_tile = 4 #タイル分割フォルダーの接頭辞 tile_prefix = "p" #タイル番号0埋め桁数 zerofill = 3 import os import shutil #再帰的に指定フォルダー以下のファイルを取得する関数 def find_all_files(directory): for root, dirs, files in os.walk(directory): yield root for file in files: yield os.path.join(root, file) #処理 for file in find_all_files(input_dir): base, ext = os.path.splitext(file) if ext = input_ext: dirs = file.split('\\') #ディレクトリーをリストに分割 region_no = dirs[dir_region] #タイル番号0埋め number = dirs[dir_tile].lstrip(tile_prefix) number = prefix + number.zfill(zerofill) #ファイル移動 dst = "{0}\\{1}_{2}_{3}{4}".format(output_dir, output_prefix, region_no, input_ext) shutil.move(file, dst) print("Done !")