0

アクセス テーブルに新しい一意の ID フィールドを作成しようとしています。という名前のフィールドが既に 1 つありますSITE_ID_FDが、これは履歴です。そのフィールドの一意の値の形式は、現在の形式とは異なるため、新しい形式で新しいフィールドを作成しています。

Old Format = M001, M002, K003, K004, S005, M006, etc

New format = 12001, 12002, 12003, 12004, 12005, 12006, etc

次のスクリプトを書きました。

fc = r"Z:\test.gdb\testfc"

x = 12001

cursor = arcpy.UpdateCursor(fc)

for row in cursor:
    row.setValue("SITE_ID", x)
    cursor.updateRow(row)
    x+= 1

これは正常に機能しますが、objectID のデフォルトの並べ替えに基づいて新しい id フィールドを設定します。最初に 2 つのフィールドを並べ替えてから、その並べ替えに基づいて新しい id フィールドを入力する必要があります (呼び出されたフィールドで並べ替えてからSITE、古い id フィールドで並べ替えたいSITE_ID_FD)

Pythonがソートを尊重することを期待して、2つのフィールドを手動でソートしようとしましたが、そうではありません。Pythonでこれを行う方法がわかりません。誰でも方法を提案できますか?

4

2 に答える 2

2

考えられる解決策は、更新カーソルを作成するときです。並べ替えたいフィールドをカーソルに指定できます (私の英語で申し訳ありません..)。ドキュメントでこれについて説明しています: http://help.arcgis.com/en/arcgisdesktop/10.0/help/ index.html#//000v0000003m000000

したがって、次のように UpdateCursor(dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields}) なります: sort_fields のみに関心があるため、コードがソートされたテーブルで適切に機能し、コードの 2 番目の部分を昇順で並べ替えたいと仮定すると、次のようになります。

fc = r"Z:\test.gdb\testfc"

x = 12001

cursor = arcpy.UpdateCursor(fc,"","","","SITE A, SITE_ID_FD A") 
#if you want to sort it descending you need to write it with a D 
#>>  cursor = arcpy.UpdateCursor(fc,"","","","SITE D, SITE_ID_FD D")

for row in cursor:
    row.setValue("SITE_ID", x)
    cursor.updateRow(row)
    x+= 1

これが役立つことを願っています

于 2012-09-23T11:04:43.937 に答える
0

コメントにarcpyドキュメントへのリンクを追加しましたが、私が知る限り、これにより新しいソートされたデータセットが作成されます--

import arcpy
from arcpy import env

env.workspace = r"z:\test.gdb"

arcpy.Sort_management("testfc", "testfc_sort", [["SITE", "ASCENDING"],
                                                ["SITE_IF_FD", "ASCENDING]])

そして、これは、ソートされたデータセットで、あなたが望むことをします:

fc = r"Z:\test.gdb\testfc_sort"
x = 12001
cursor = arcpy.UpdateCursor(fc)

for row in cursor:
    row.setValue("SITE_ID", x)
    cursor.updateRow(row)
    x+= 1

ソート/変更されたデータセットを元のデータセットにコピーする方法があると思いますが、それで問題ありませんか?

私はarcpyを使用していないことを認めます。ドキュメントはもっと明示的である可能性があります。

于 2012-09-12T22:10:58.553 に答える