YouTube | Facebook | X(Twitter) | RSS

Vricon 3D i3s をポータルにアップロードするためのバッチ リネーム処理

2018/6/28 (木)

ArcGIS Online や Portal for ArGIS にコンピューター上のファイルをアイテムとして登録する際は、サイトにつきユニークなファイル名でなければいけません。

例えば、Vricon 3D という製品の i3s (*.spk) ファイルは、ポータルから登録するアップローダーのファイルサイズ上限がある関係で、購入範囲がタイル上に分割されています。分割された地域はフォルダーに分類されますが、i3s ファイルはすべて同じ「vricon_i3s.spk」というファイル名になります。そこで、このファイルをユニークな名称にバッチ処理する方法を考えました。

フォルダー分割

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 !")

  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

-プログラミング, ArcGIS
-,