2 回答
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”并找到最高索引。
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 时,我可以看到这种方法会导致问题。
谢谢你们的反馈!
添加回答
举报