概要
属性テーブルまたは、テーブル データを CSV ファイルに出力するサンプル ツールをご紹介します。
入力パラメータ
- [入力テーブル] : フィーチャクラス、またはフィーチャレイヤ、テーブル データを設定します。
- [出力テーブル] : CSV ファイルの出力先、出力名を設定します。
(出力名に CSV ファイルの拡張子(.csv)を記述しなくてもエクスポート可能です。)
内容
[入力テーブル] に設定したフィーチャクラス、またはフィーチャレイヤが持つ属性テーブルやテーブル データを [出力テーブル] に設定した出力先、出力名にエクスポートします。なお、ArcGIS 特有のフィールドである「Shape」フィールドは出力されません。また、「FID」 や 「OBJECTID」フィールドは、フィールド名としてフィールド名の最後に「_」(アンダースコア)を付けて出力されます。
使用手順
- サンプル ツールが格納されたファイル(zip ファイル)をダウンロードします。
- zip ファイルを解凍し、tbx ファイルを任意のフォルダにコピーします。
- ArcMap を起動し、データを追加します。
- [カタログ] ウィンドウで先ほどコピーしたツールボックスを展開し、[CSV ファイルにエクスポート] ツールをダブルクリックします。
- パラメータを入力し、ツールを実行します。
ダウンロード
※ans4591_ConvertTable.zip という名前の zip ファイルがダウンロードされます。
Python ソース コード
# coding:cp932
# Purpose : 属性テーブルを CSV ファイルにエクスポート
#
# Author : ESRIジャパン
# ArcPy サイト パッケージ、csv モジュールのインポート
import arcpy,csv
# ツールのパラメータを設定します。
input = arcpy.GetParameterAsText(0)
outcsv = arcpy.GetParameterAsText(1)
# ツール ダイアログで出力ファイルの拡張子に.csv が付いていない場合は
# 自動的につけます。
if not outcsv.endswith(".csv"):
outcsv += ".csv"
# CSV ファイルの 1 レコード目にフィールド名を付与させるため、入力データが持つ
# フィールド名の一覧を取得します。
try:
OIDField = arcpy.Describe(input).OIDFieldName
except:
OIDField = ""
fields = arcpy.ListFields(input)
field_list = []
for field in fields:
field_list.append(field.name.encode('cp932'))
field_list.remove(u"Shape")
field_value = []
for fieldname in field_list:
field_value.append(fieldname)
if OIDField in field_list:
field_list[field_list.index(OIDField)] = OIDField + "_"
# CSV ファイルにフィールド名、属性値を書き込みます。
writer = csv.writer(file(outcsv, "wb"))
# フィールド名
writer.writerow(field_list)
# 属性値
cur = arcpy.SearchCursor(input)
for row in cur:
vallist = []
for field in field_list:
result = row.getValue(field)
if type(result) == unicode:
result = result.encode('cp932')
vallist.append(result)
else:
vallist.append(result)
writer.writerow(vallist)
# オブジェクトを削除し、参照を解放
del row,cur,writer
# ツールの完了を示すメッセージを表示
arcpy.AddMessage("n" + outcsv + u" の出力が完了しました。" + "n")
こちらのサンプルはあくまでもコーディングの見本であり、ツール実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねます。新規バージョンに対応したツールを継続的に提供することを保証するものでもないことも予めご承知おきください。
このナレッジはお役に立ちましたか?
フィードバックをいただきありがとうございます!