TransWikia.com

Adding an incrementor in CalculateField_managment() expression

Geographic Information Systems Asked on January 19, 2021

I am trying to recalculate a value for a field using arcpy.CalculateField_management() using a tricky expression. Currently, I am recalculating one field named REACH_ID, using another field (‘CO_FIPS’) and them adding "01" + '!REACH_ID[-5:]'

arcpy.CalculateField_management(layer_output,'REACH_ID','!CO_FIPS! + "01" + !REACH_ID![-5:]','PYTHON')    

So if I had a REACH_ID = 440030100008 and a CO_FIPS = 44023, it would recalculate as 440230100008. Now what I want to do is simply replace the '!REACH_ID[-5:]' with an incrementor. So if 440030100008 was the first REACH_ID in my attribute table, I want to make replace 00008 with 00001 and then for the next row, I want to add 00002, and so on. The first problem is that its tricky creating a string incrementor, but I have overcome that issue. I can use something like this (using a ‘counter’):

x = '00000'
for i in range(0, 10):
    x = str(int(x) + 1).zfill(len(x))
    print(x)

or as a function where length would be the row count of the feature, layer_output :

x = '00000'
f_length = arcpy.GetCount_management(layer_output)
def incrementor(counter, length):
    for i in range(0, length):
        counter = str(int(counter) + 1).zfill(len(counter))
        print(counter)

arcpy.CalculateField_management(layer_output,'REACH_ID','!CO_FIPS! + "01" + incrementor(x, f_length),'PYTHON') 

But, the problem is…how does one get the incrementor to work inside of the expression in CalculateField_management? Am I going about this the wrong way? I haven’t come across any other questions that explain how to achieve this.

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP