0

私のハードウェア割り当てのステップで誰かが私を助けてくれるかどうか疑問に思っていました...

これまでのところ、これは私のpythonプログラムです。これは、想定されていることを行います。

# Import system modules
import sys, string, os, arcgisscripting

# Create the Geoprocessor object
gp = arcgisscripting.create()

# Load required toolboxes...
gp.AddToolbox("C:/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")

# Script argum ents...
Input_Table = sys.argv[1]
gp.addmessage("sys.argv[1] is " + Input_Table)

Field_Name = sys.argv[2]
gp.addmessage("sys.argv[2] is " + Field_Name)

# Local variables...
Output_Feature_Class = ""

# Process: Add Field...
gp.AddField_management(Input_Table,     Field_Name, "TEXT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

私の仕事は、2 番目のパラメーター (sys.argv[2]) をアンパックしてリスト内の複数の項目に分割し、追加フィールド コードをループに入れて複数のフィールド値を追加することです。

明らかに、pythonは私のものではありません。これは簡単な作業だと確信しています。

本当にありがとう!

4

4 に答える 4

0

モデルビルダーを使用して、テーブルにフィールドを追加するための基本的なスクリプトを作成しました。私の仕事は、(1)Arcのデータテーブルに6つのフィールドを追加できるようにすることです。(2)データセットからの結果をこのテーブルに書き込みます。

これで、Arcで作成した空のシェープファイルに複数のフィールドを追加できますが、毎回スクリプトを実行して、フィールド名を手動で入力する必要があります。(これはすべてArcで実行されますが、IDLEで編集しています)。

上記のスクリプトは私が最初に持っていたものです。新しいフィールドのリストを追加しました。

new_fields=['DOM_CLASS', 'DOM_LIMIT', 'DOM_VAL', 'SUB_CLASS', 'SUB_LIMIT', 'SUB_VAL']

sys.argv[2]の最後に分割を追加しました

 Field_Name = sys.argv[2].split(',')

これは私がエラーメッセージを受け取るところです

スクリプトの最後の行をループに入れます

 for i in range (len(new_fields)):
     gp.AddField_management(Input_Table, Field_Name, "TEXT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

したがって、「sys.argv [2]をリスト内の複数の項目に解凍してから、追加フィールドコードをループで囲んで、複数のフィールド値を追加する」必要があります。

ヘッダーの範囲が3から8になることを考慮する必要がありますか?

私は見つけることができるすべてのオンラインPythonヘルプを読んで(そして理解しようとして)何時間も費やしました。本当にありがとうございました。

于 2010-10-18T04:39:45.153 に答える
0

sys.argv[2] を任意の文字で区切られたリストに分割するには、次の形式を使用します。sys.argv[2].split(<character to split by>)「分割する文字」は、スラッシュ文字で分割する場合は「/」、場合は「,」のようなものです。コンマで分割したい。Python の対話モードで試して、sys.argv[2] に入力される文字列でテストしてください。リストをループするには、a: を使用して、for i in range(len(<list name>)):先ほど示した分割関数によって返されたリスト内のすべての項目を反復処理します。私はすべてを手放したくないので、あなたをそこに残します。うまくいけば、残りを理解できるでしょう! 幸運を。

于 2010-10-14T09:17:17.727 に答える
0

まず、正確にどのようなエラー メッセージが表示されますか? そして、あなたはあなたのスクリプトにどのような入力をしていますか(コマンドラインからpythonスクリプトを実行する方法を知りたいです.「python myFile.py arg1 arg2」のようなものです)?

次のようなものが必要です。

for i in range(len(new_fields)): 
     Field_Name = new_fields[i] 
     gp.AddField_management(Input_Table, Field_Name, "TEXT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

これで問題が解決したかどうかお知らせください。

于 2010-10-22T21:32:34.643 に答える
0

1)新しい配列のイテレータを次のようにスキップできます: for item in new_fields:

これにより、新しい変数 item が配列の各部分の値に設定されます。

for item in new_fields:
    gp.AddField_management(Input_Table,item,"TEXT","","","","","NULLABLE","NON_REQUIRED","")

2) エラーは、配列オブジェクトを分割しているためです。Split は、文字列オブジェクトで動作するように設計されています。あなたが持っていた場合:

new_fields = "DOM_CLASS,DOM_LIMIT,DOM_1,DOM_2"
Split_fields = new_fields.split(',')

Split_Fields would then = ["DOM_CLASS","DOM_LIMIT","DOM_1","DOM_2"]

于 2013-03-20T18:41:38.193 に答える