こんなときにはArcpyを使って処理するとべんりです。
# arcpyをインポートする import arcpy # 必要なエクステンションがあるかどうかをチェックする # spatial analyst = "spatial" # 3D analyst = "3D" arcpy.CheckOutExtension("spatial") # 入出力する変数を定義する # パスとファイル名はダブルコーテーションで囲う # パス区切りは\\で行う hexagons_shp = "D:\\test\\hexagons.shp" dem50gsi_j2ku54_img = "D:\\test\\dem50gsi_j2ku54.img" output_table = "D:\\temp\\zst_slope_02.dbf" # 処理コマンド中に上記変数を入力する # 上記の変数以外の設定値はダブルコーテーションで囲って指定する # どのような変数が必須かはHELPを参照する arcpy.gp.ZonalStatisticsAsTable_sa(hexagons_shp, "Unique_ID", dem50gsi_j2ku54_img, output_table, "NODATA", "ALL") # 処理が終了したらfinishという文字を表示させる print "finish"
# globモジュールをインポートする import glob # arcpyをインポートする import arcpy # 出力ファイルのパスと名前を指定 outputdata = "C:\\temp\\ps_merge_all.shp" # ワイルドカードを使用して入力データリストを指定 files = glob.glob('C:\\temp\\*.shp') # Process: マージ (Merge) arcpy.Merge_management(files, outputdata) # 処理終了時にfinishと出力する print "finish"
ここでの例:国土基本メッシュ単位に分割されたレーザー測量データ(カンマ区切りテキスト)を読み込んでESRI shape file 形式に変換する
# arcpyをインポートする import arcpy # 入力および出力ファイルのディレクトリを指定 input_dir = "D:\\last_p" output_dir = "D:\\last_p_out" # 以下より処理内容 try: for x in [111, 222, 333, 444, 555, 666, 777, 888, 999]: #変数の宣言 fc = input_dir + "\\13lf" + str(x) + "_l_org_h.txt" fc2 = str(x) + "_la" fc3 = output_dir + "\\13lf" + str(x) + "_p_j2kxy13.shp" # Process: XY イベント レイヤの作成(Make XY Event Layer arcpy.MakeXYEventLayer_management(fc, "x", "y", fc2, "", "z") # Process: フィーチャのコピー(Copy Features) arcpy.CopyFeatures_management(fc2, fc3, "", "0", "0", "0") # 処理が1サイクル正常に終了したら出力ファイル名を表示させる print str(x) + "_p_j2kxy13.shp" # どこかで処理が停止した場合 "error" と表示させる except: print "error" # すべての処理が正常に終了したら"finish"と表示させる print "finish"
for x in [111, 222, 333, 444, 555, 666, 777, 888, 999]:
250m間隔で最大60kmまでテキストを出力
(ex.250 500 750 1000・・・・)
# process for defining break value # define minimum number min_v = 250 # define maximum number max_v = 60000 # define output text file out_put = "C:\\temp\\output.txt" # define range value ini_v = min_v + min_v end_v = max_v + min_v int_v = min_v # define break value break_v = min_v # set repeat number and interval for x in range(ini_v,end_v,int_v): break_v = str(break_v) + " " + str(x) # process text file output f = open(out_put, 'w') f.write(break_v) f.close() print break_v print "finish"
import arcpy import glob import os.path # set target directory T_path = "C:\\temp\\" # get file list as fullpath listgps = glob.glob(T_path + "*.shp") for f in listgps: # Process: Add Field arcpy.AddField_management(f, "orig_name", "TEXT", "", "", "100", "", "NULLABLE", "NON_REQUIRED", "") # get file name from fullpath f2 = os.path.basename(f) # set formula into a specific format f3 = "\"" + f2 + "\"" # Process: Calculate Field arcpy.CalculateField_management(f, "orig_name", f3, "PYTHON", "") print "finish"
スプレッドシート上に入力されたファイル名やIDに該当するデータのみを選択して処理したい、というケースに使います
# 各モジュールをインポートする import csv import sys # CSVファイルのフルパスを指定する csvfile=open("C:\\temp\\list.csv") # 各行のデータおよび各行の列数を格納するリストをそれぞれ宣言する rowlist = [] colnum = [] # 1行毎にリストにし列数をカウントする for row in csv.reader(csvfile): rowlist.append(row) colnum.append(len(row)) # 行列変換 (各列の要素をリストにする) collist = [] for colnum in range(max(colnum)): eachcollist = [] for rownum in range(len(rowlist)): eachcollist.append(rowlist[rownum][colnum]) collist.append(eachcollist) # 行数(レコード数数)および列数の確認 print str(len(rowlist)) + " 行(レコード)" countcol = len(collist) print countcol,"列", # 指定した行をリストとして表示し確認 # ただし指定列数から1を引いた値を指定すること (1列目だったら0と指定) print collist[0]
あとは for x in collist[0]: として繰り返しの処理を行う