为了账号安全,请及时绑定邮箱和手机立即绑定

顺序 ID 生成器 python ArcGIS

顺序 ID 生成器 python ArcGIS

慕田峪9158850 2021-11-23 19:06:16
你好,stackoverflow 社区,我只有 2 个月的 Python 经验,但决定用一个班级项目挑战自己,并最终将其纳入我的工作。我使用 ArcGIS,我想创建一个循环脚本,根据“系统”字段更新字段上的 ID。示例:如果系统字段是“Chaparral”,那么我希望 ID 字段以字母“CH-HY”开头,然后设置一个计数器 +1,将 1 添加到字段中已有的现有 ID,如“CH-HY0006” '。这是我现在所拥有的。填充消火栓 ID 字段with arcpy.da.UpdateCursor("Hydrants.shp", ["FACILITYID", "SYSTEM"]) as cursor:    for row in cursor:        if (row[0] == '<Null>' and row[1] == 'Chaparral'):            row [0] = 'CH-HY{}'.format(int1)         elif (row[0] == '<Null>' and row[1] == 'SunCity'):             row [0] = 'SC-HY{}'.format(int2)     cursor.updateRow(row)这就是我被困的地方。我如何检索字段中已有的 ID 并获得最高数字,以便我可以将其加 1。我真的想不惜一切代价避免在同一系统中创建重复项。
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

如果您只是为了填充字段而写入,而不是读取和写入 - 您可以在循环之外创建一个状态变量来跟踪索引。


with arcpy.da.UpdateCursor("Hydrants.shp", ["FACILITYID", "SYSTEM"]) as cursor:

    chaparral_index = 0

    Suncity_index = 0

    for row in cursor:

        if (row[0] == '<Null>' and row[1] == 'Chaparral'):

            row [0] = 'CH-HY{}'.format(chaparral_index)

            chaparral_index += 1 

        elif (row[0] == '<Null>' and row[1] == 'SunCity'): 

            row [0] = 'SC-HY{}'.format(Suncity_index)

            Suncity_index += 1 

    cursor.updateRow(row)

如果您打算从预先存在的数据中读取,您可能需要引入正则表达式来解析“FACILITYID”并找到最高索引。


查看完整回答
反对 回复 2021-11-23
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

为了检索现有的最后一个 ID,我使用 Search.Cursor 像这样用于 Chaparral 系统:


CHvalues = [row[0] for row in arcpy.da.SearchCursor("Hydrants.shp", "FACILITYID", "SYSTEM = 'Chaparral'")]


CHuniqueValues = max(CHvalues)


CHintLastVal = int(CHuniqueValues[-4:])

这是我如何将它实现到循环中:


with arcpy.da.UpdateCursor("Hydrants.shp", ["FACILITYID", "SYSTEM"]) as cursor:

for row in cursor:

    if ((row[0] == None or  row[0] == '<Null>' or row[0] == '') and row[1] == 'Chaparral'):

        CHintLastVal = CHintLastVal + 1

        CHstr099 = str(CHintLastVal)

        print('CH-HY{}'.format(CHstr099))

        row [0] = 'CH-HY{}'.format(CHstr099)

我将不得不研究 re.search,因为当整数达到 9,999 并且 int[-4] 需要更改为 [-5] 以容纳 10,000 时,我可以看到这种方法会导致问题。


谢谢你们的反馈!


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 256 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信