現在、ModelBuilderで遊んでいます。現在持っているモデルの写真を追加しました。
このモデルは現在6つのシェープファイルを反復しているため、「出力値」のそれぞれにはリストに6つの数字が含まれています。これらのリストからテーブル/テキストファイルなどに値を抽出する方法が見つかりません。
これを行う方法はありますか?
これは、モデルの実行後に「出力値」を開いたときに表示されるものです。
どういうわけかこの6つの数字を取得したいだけです...
現在、ModelBuilderで遊んでいます。現在持っているモデルの写真を追加しました。
このモデルは現在6つのシェープファイルを反復しているため、「出力値」のそれぞれにはリストに6つの数字が含まれています。これらのリストからテーブル/テキストファイルなどに値を抽出する方法が見つかりません。
これを行う方法はありますか?
これは、モデルの実行後に「出力値」を開いたときに表示されるものです。
どういうわけかこの6つの数字を取得したいだけです...
回答:
これを行うには、値の計算(データ管理)ツールといくつかのPythonマジックを使用します。この関連質問も参照してください:Arcgisモデルビルダーに任意のコードを追加しますか?
多値変数は、値のちょうどセミコロンで区切られた文字列であるので、どのようなmultivaluesToCsv
以下の機能がありませんがリストに多値変数を分割し、その後に書かれている行にそれらを転置されるCSV(カンマ区切り値)テキストファイル。
モデル反復子は、モデル内のすべてのプロセスを反復ごとに1回実行します。これは、値の計算ツールでは望ましくありません。これを実現するには、別の外側モデルを作成して、元の内側モデルをラップします。これは、ヘルプトピック「モデル内でのモデルの統合」で説明されています。
そのため、これを機能させるために必要なことは次のとおりです。
内部モデル -フィーチャクラスの反復、処理、値の収集:
Name
変数の値を収集し、距離統計値を対応するフィーチャクラス名にマッピングできるようにします。外側のモデル -内側のモデルを実行し、内側のモデルが完了したときに値の計算ツールを1回だけ実行します。
Folder
する場所を指定できるようにします。String
を指定できるようにします。[値の計算]ツールの適切なボックスに次を貼り付けます。
表現:
multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
r
前"%Output CSV File Location%"
重要である:これは、これがあることを示している生の文字列。通常、Windowsファイルシステムのパスにはバックスラッシュ(Pythonのエスケープ文字)が含まれているため、これを使用して、Pythonがバックスラッシュと後続の文字を特殊文字シーケンスとして誤って解釈しないようにする必要があります。コードブロック:
import os, csv
def multivaluesToCsv(csvfilepath, csvfilename, fcnames, minvalues, avgvalues, maxvalues):
ext = 'csv' # Define output file extension (e.g. csv or txt)
header = ['FC', 'MIN', 'AVG', 'MAX'] # Define header row (column names)
# Join CSV file path and name, adding extension if necessary
csvfile = os.path.join(csvfilepath, os.extsep.join((csvfilename, ext)) if not os.path.splitext(csvfilename)[1].lower().endswith(ext) else csvfilename)
# Open text file for writing
with open(csvfile, 'wb') as f:
w = csv.writer(f)
w.writerow(header) # Write header row
rows = zip(*map(lambda x: x.split(';'), [fcnames, minvalues, avgvalues, maxvalues])) # Transpose the semicolon-delimited values into rows
w.writerows(rows)
return csvfile
(オプション)モデルのツールダイアログから実行したり、他のモデル/スクリプトとチェーンしたりできるようにしたい場合は、入力変数と出力変数をモデルパラメーターとして公開します。外部モデルの唯一の出力はCSVファイルです。
これをModelBuilderでテストし、動作させました(スクリーンショットを参照)。
内部モデル:
外側モデル:
内部モデルはすべてのプロセスをフィーチャクラスごとに1回実行し、その後、値の計算ツールを最後に1回実行してCSVファイルを1回だけ出力します。