我正在尝试在访问表中创建一个新的唯一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中执行此操作。有谁能建议一种方法?
答案 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,而且文档可能更明确。