0

我正在尝试在访问表中创建一个新的唯一 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 中执行此操作。任何人都可以提出一种方法吗?

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 感兴趣,因此假设您的代码在排序表上运行良好并且您希望该表按代码的第二部分升序排列应该如下所示:

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 回答