在Sorting,Python之后填充唯一ID字段

时间:2012-09-12 20:27:20

标签: python sorting updates arcpy

我正在尝试在访问表中创建一个新的唯一ID字段。我已经有一个名为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排序)

我尝试手动排序2个字段,希望Python能够尊重排序,但事实并非如此。我不确定如何在Python中执行此操作。有谁能建议一种方法?

2 个答案:

答案 0 :(得分:2)

可能的解决方案是在创建更新游标时。你可以指定你希望它被排序的字段(对不起我的英文..),他们在文档中解释了这一点:http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//000v0000003m000000

所以它是这样的: UpdateCursor(dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields}) 并且您只对sort_fields感兴趣,所以假设您的代码在排序的表上运行良好,并且您希望列出的代码表示代码的第二部分应该如下所示:

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

我希望这有帮助

答案 1 :(得分: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,而且文档可能更明确。