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

関連記事

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

Copyright© WINGFIELD since1981 , 2018 All Rights Reserved.