Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Being the AML dinosaur that I am, I am just learning python and I need to convert a 2 digit numeric attribute in a table to a 2 digit zero-filled attribute in a script. Example 9 needs to be 09. Any help would be appreciated.

share|improve this question
3  
If your field is numeric field you will have to create a new text field to do this. Also, what version of ArcGIS are you using? –  artwork21 Feb 6 '13 at 15:36
    
Thanks I am using 10.0 and the zfill worked for me. I'm an old dog learning new tricks much apprecaited. –  Giuseppe Filoso Feb 13 '13 at 14:29

3 Answers 3

up vote 5 down vote accepted

See the zfill() help in python.org or this stackoverflow post. As @artwork mentions, you must convert the value to string and make the calculation. You can use zfill() inside the cursor, or use as an expression in the Calculate Field tool.

share|improve this answer
2  
Good suggestion! n = 4 or n = 40 followed by print str(n).zfill(2) will return the correctly padded values. –  RyanDalton Feb 6 '13 at 22:48
1  
Here is the syntax to use in a Calculate Field expression: str(!NUM_ID!).zfill(2) -- where NUM_ID is your source field. –  blah238 Feb 7 '13 at 12:18

If you already have a value and you need to make it 2 digit value, have a look:

import sys

inputValue = sys.argv[1]
checkValue = int(inputValue)

if checkValue <= 9:
    inputValue = '0' + inputValue
print inputValue

input->output: 2 -> 02, 20 -> 20

share|improve this answer
1  
While this will work, the built-in functions zfill or rjust make much more sense. –  blah238 Feb 7 '13 at 6:44
    
Thank you zfill did the trick. –  Giuseppe Filoso Feb 13 '13 at 14:30

This should do the trick (if using ArcGIS 10.1, for ArcGIS 10 you will have to use this update cursor):

  1. First add a empty text field, e.g. textField to your feature class or shapefile.

  2. You can run the below code in PythonWin, ArcMap, or ArcCatalog Python window. Or put it into a .py file and call it from a user created toolbox script tool.

Updated:

    import arcpy

    fc = "C://temp//Default.gdb//myLayer" # update to your layer
    fields = ('numField', 'textField') # put your numeric and text field here
    with arcpy.da.UpdateCursor(fc, fields) as cursor:
        for row in cursor:
            if row[0] <= 9:
                row[1] = '0' + str(row[0])
                cursor.updateRow(row)
share|improve this answer
3  
I don't think this will work if the number is already 2 digits (10 - 99)? I think you will end up with a padded '010' or '099' when the user actually wants '10' and '99' if the number is already 2 digits long? –  RyanDalton Feb 6 '13 at 22:44
    
Updated my answer, thx. –  artwork21 Feb 7 '13 at 11:36

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.