顺序 ID 生成器 python ArcGIS

你好,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。我真的想不惜一切代价避免在同一系统中创建重复项。


慕田峪9158850
浏览 257回答 2
2回答

慕桂英546537

如果您只是为了填充字段而写入,而不是读取和写入 - 您可以在循环之外创建一个状态变量来跟踪索引。with arcpy.da.UpdateCursor("Hydrants.shp", ["FACILITYID", "SYSTEM"]) as cursor:&nbsp; &nbsp; chaparral_index = 0&nbsp; &nbsp; Suncity_index = 0&nbsp; &nbsp; for row in cursor:&nbsp; &nbsp; &nbsp; &nbsp; if (row[0] == '<Null>' and row[1] == 'Chaparral'):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row [0] = 'CH-HY{}'.format(chaparral_index)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chaparral_index += 1&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; elif (row[0] == '<Null>' and row[1] == 'SunCity'):&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row [0] = 'SC-HY{}'.format(Suncity_index)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Suncity_index += 1&nbsp;&nbsp; &nbsp; cursor.updateRow(row)如果您打算从预先存在的数据中读取,您可能需要引入正则表达式来解析“FACILITYID”并找到最高索引。

有只小跳蛙

为了检索现有的最后一个 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:&nbsp; &nbsp; if ((row[0] == None or&nbsp; row[0] == '<Null>' or row[0] == '') and row[1] == 'Chaparral'):&nbsp; &nbsp; &nbsp; &nbsp; CHintLastVal = CHintLastVal + 1&nbsp; &nbsp; &nbsp; &nbsp; CHstr099 = str(CHintLastVal)&nbsp; &nbsp; &nbsp; &nbsp; print('CH-HY{}'.format(CHstr099))&nbsp; &nbsp; &nbsp; &nbsp; row [0] = 'CH-HY{}'.format(CHstr099)我将不得不研究 re.search,因为当整数达到 9,999 并且 int[-4] 需要更改为 [-5] 以容纳 10,000 时,我可以看到这种方法会导致问题。谢谢你们的反馈!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python