概要
属性テーブルをテキスト ファイル(.txt)、または CSV ファイル(.csv)に出力するサンプル ツールをご紹介します。
※ テーブル データ、テーブル ビューには対応しておりません。
入力パラメータ
- [入力テーブル] : フィーチャクラス、またはフィーチャ レイヤを設定します。
- [条件式](オプション) : 条件式に当てはまるレコードのみをエクスポートすることができます。
- [フィールドの選択](オプション) : エクスポートするフィールドを選択する場合は、チェックを入れます。
※ チェックを入れない場合は、すべてのフィールドがエクスポートされます。 - [フィールド](オプション) : エクスポートしたいフィールドにチェックを入れます。
- [出力形式] : エクスポートするファイル形式をテキスト、CSV の 2 つからの選択します。
- [出力テーブル] : 出力ファイルの出力先、出力名を設定します。
※ 出力名に拡張子を入力しなくても、エクスポート可能です。
内容
[入力テーブル] に設定したフィーチャクラス、またはフィーチャ レイヤの属性テーブルを [出力テーブル] で設定した出力先、出力名に [出力形式] の形式でエクスポートします。[条件式] で SQL クエリによる条件式を設定している場合は、条件式に該当するレコードのみをエクスポートします。また、[入力テーブル] に設定したデータの属性テーブルから、エクスポートするフィールドを選択したい場合は、[フィールドの選択] にチェックを入れ、[フィールド] からエクスポートしたいフィールドにチェックを入れます。
ArcMap から属性テーブルのエクスポートを行った結果と同様の結果が出力されます。
- 「FID」フィールド、または「OBJECTID」フィールドは、後ろに「_」(アンダースコア)を付け、フィールド名のみエクスポート
- 「Shape」フィールドはエクスポートしない
フィーチャを選択している場合は、選択フィーチャのみを対象にツールが実行され、さらに [条件式] パラメータを設定した場合、選択フィーチャかつ条件式に該当するレコードのみがエクスポートされます。条件式に該当するレコードが存在しない場合、フィールド名のみのファイルがエクスポートされます。
使用手順
- zip ファイルをダウンロードし、任意のフォルダに解凍します。
- ArcMap を起動し、データを追加します。
- [カタログ] ウィンドウで解凍により作成されたフォルダを展開します。
- フォルダ内の「ConvertTable」ツールボックスを展開し、[属性テーブルをTXTまたはCSVに変換 10.1用] ツールをダブルクリックします。
- パラメータを入力し、ツールを実行します。
ダウンロード
※ ans4821.zip という名前の zip ファイルがダウンロードされます。
Python ソース コード
# coding:cp932
#----------------------------------------------------------------
# Purpose : 属性テーブルを TXT または CSV ファイルにエクスポート
#
# Author : ESRIジャパン
#----------------------------------------------------------------
# ArcPy サイト パッケージのインポート
import arcpy
arcpy.env.overwriteOutput = 1
# ツールのパラメータを設定します。
input = arcpy.GetParameterAsText(0)
exp = arcpy.GetParameterAsText(1)
check = arcpy.GetParameterAsText(2)
selfields = arcpy.GetParameterAsText(3)
outtype = arcpy.GetParameterAsText(4)
outtxt = arcpy.GetParameterAsText(5)
# フィーチャ レイヤを作成し、SQL クエリにより選択を行います。
arcpy.MakeFeatureLayer_management(input,"select")
arcpy.SelectLayerByAttribute_management("select","",exp)
# ツール ダイアログで出力ファイルの拡張子が付いていない場合は
# 自動的につけます。
if arcpy.GetParameter(4) == u"テキスト":
if not outtxt.endswith(".txt"):
outtxt += ".txt"
else:
if not outtxt.endswith(".csv"):
outtxt += ".csv"
# ファイルの 1レコード目にフィールド名を付与させるため、入力データが持つ
# フィールド名の一覧を取得します。
try:
OIDField = arcpy.Describe("select").OIDFieldName
except:
OIDField = ""
ShapeField = arcpy.Describe("select").shapeFieldName
field_list = []
if check == "true":
count = range(0,len(arcpy.GetParameter(3)))
for i in count:
field_list.append(arcpy.GetParameter(3)[i].value.replace(u"'",""))
if ShapeField in field_list:
field_list.remove(ShapeField)
else:
fields = arcpy.ListFields("select")
for field in fields:
field_list.append(field.name.encode('cp932'))
if ShapeField in field_list:
field_list.remove(ShapeField)
field_value = []
for fieldname in field_list:
field_value.append(fieldname)
if OIDField in field_list:
field_list[field_list.index(OIDField)] = OIDField.encode("cp932") +"_"
# ファイルにフィールド名、属性値を書き込みます。
myfile = open(outtxt,"w")
# フィールド名
field_name = ""
for name in field_list:
field_name += '"' + name + '"' + ","
field_name = field_name[:-1]
myfile.write(field_name + "n")
# 属性値
if arcpy.GetCount_management("select").getOutput(0) == "0":
myfile.close()
else:
cur = arcpy.SearchCursor("select")
for row in cur:
vallist = []
for field in field_value:
result = row.getValue(field)
if type(result) == unicode:
result = result.encode('cp932')
vallist.append(result)
else:
vallist.append(result)
if OIDField in field_value:
value = ","
for val in vallist[1:]:
if type(val) == str or type(val) == unicode:
val = '"' + val + '"'
value += str(val) + ","
else:
value = ""
for val in vallist:
if type(val) == str or type(val) == unicode:
val = '"' + val + '"'
value += str(val) + ","
value = value[:-1]
myfile.write(value + "n")
myfile.close()
del row,cur
# オブジェクトを削除し、参照を解放
del myfile
# ツールの完了を示すメッセージを表示
arcpy.AddMessage("n" + outtxt + u" の出力が完了しました。" + "n")
こちらのサンプルはあくまでもコーディングの見本であり、ツール実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。新規バージョンに対応したツールを継続的に提供することを保証するものでもないことも予めご承知おきください。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねます。