arcpy.da.UpdateCursor()をソートすることは可能ですか?


8

ArcPy Data Accessの更新カーソルを持っていますが、更新する前に並べ替えたいと思います。

ソートしない場合、カーソルは更新を行いますが、カーソルにソートを追加すると、「反復が開始されていません」というエラーが発生します。

並べ替えは正しく機能していますが、なんらかの理由でカーソルを破壊している必要があります。

検索カーソルのように更新カーソルを並べ替えることはできませんか?タイプや何かを変えますか?

    idList = ['100100', '100200', '100300', '200100']
    count = 0
    with arcpy.da.UpdateCursor(newFC, ("SHAPE@X", "SHAPE@Y", "Label")) as addLabelCursor:            
        for row in sorted(addLabelCursor, key=itemgetter(0), reverse = True): 
            print idList[count]
            row[2] = str(idList[count])
            addLabelCursor.updateRow(row)
            count += 1

デバッグセッションでローカルを監視すると、 "addLabelCursor"はda.UpdateCursorオブジェクトのままです。ソートしたときにリストに変換されるのとは異なります。
TurboGus 2012

それは失敗しています:addLabelCursor.updateRow(row)
TurboGus

SQL句(ORDER BY)を使用してカーソル呼び出し内でソートする必要があります
jbalk

回答:


11

に入る前に、ソートによってカーソルが完全に使い果たされupdateRowます。カーソルが機能する方法は、updateRow呼び出しがシーケンス外の任意の行ではなく、反復されている現在の行で機能することです。つまり、一度に1つの行しか操作できません。

代わりに、ジオデータベース側でこれを行うことを検討したい場合があります。ORDER BY代わりに、句を指定してソートすることができます。


カーソルのsql句でジオメトリトークンを使用できないようです。事前に実際のフィールドに追加するなどの回避策を使用する必要があります。または、このカーソル入力をメモリに格納し、検索カーソルを使用してソートし、カーソルを挿入して作成します。更新カーソルを並べ替えることができず、まだ更新できないことを確認していただきありがとうございます。
TurboGus

7
@TurboGusです、カーソル内の行を並べ替えることができます。ヘルプには、ユーザーが指定することができますを示しているsql_clause(タプル)のパラメータを:sql_clause=(None, 'ORDER BY SORT_FIELD ASC')-またはDESC降順のために。
nmpeterson 2014年

2

@nmpetersonが指摘したように、カーソル呼び出しにSQL句を入力して、フィールドでソートできます。

UpdateCursor(in_table、field_names、{where_clause}、{spatial_reference}、{explode_to_points}、{sql_clause}

SQLプレフィックスは、None、DISTINCT、およびTOPをサポートします。SQL postfixは、None、ORDER BY、およびGROUP BYをサポートしています。

sql_clause =(None、 'ORDER BY SORT_FIELD ASC')-またはDESC

情報はESRIヘルプから取得されます:http : //resources.arcgis.com/en/help/main/10.2/index.html#//018w00000014000000


0

これは将来の参照にのみ関連する可能性がありますが、ArcGisのオンラインヘルプによると、arcpy.da.UpdateCursorの代わりにarcpy.UpdateCursorを使用すると、並べ替えオプションが利用可能になります。

カーソル= arcpy.UpdateCursor(fc、sort_fields = " YOURFIELDNAME ")

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.