I'm trying to sort a table based on three fields with ArcPy (which should be only one line of code), and I had a "tool is not license" error. I just saw that sorting with multiple fields as parameters is an ArcInfo feature only. I have ArcView (soon ArcEditor).

Any ideas how I could code this to bypass that limitation with ArcPy?

1 Answer 1


You could create a new empty table and use cursors to sort your data and insert the rows into the new table (this code has not been tested):

import arcpy,os

inTable = r'c:\workspace\path\in_table.dbf'
outPath = r'c:\workspace\path'
sortedTableName = r'sorted_table.dbf'
arcpy.env.workspace = outPath
arcpy.overwriteOutput = True

#--check if output table exists, if not, create it
if not os.exists(os.path.join(outPath,sortedTableName)):

    #--make a list of all fields in input table
    flist = arcpy.ListFields(inTable)

    #--add fields to output table
    for f in flist:

#--if the table does exist, delete all rows so we can start fresh
        #--no rows to delete

#--create an insert cursor that will append data to output table
irows= arcpy.InsertCursor(os.path.join(outPath,sortedTableName))

#--create a search cursor to sort and then read data from input table
rows = arcpy.SearchCursor(inTable,'#','#','#','SORT_FIELD1 A;
                            SORT_FIELD2 D;
                            SORT_FIELD3 A')
for row in rows:
    #--create a new row object in the output table
    newrow = irows.newRow()
    #--populate each field
    for f in flist:
    #--insert new row

del irows,rows
  • Didn't thought of that one! Thanks!
    – fgcarto
    Commented Apr 3, 2012 at 16:51
  • @fgcartographix, let me know if this works, if it does I'd appreciate it if you'd click on "accept answer"! :O) Commented Apr 3, 2012 at 17:22
  • Thats a very clever workaround. Great idea. Commented Apr 3, 2012 at 17:30
  • Of course... already clicked. In theory, it should work well...
    – fgcarto
    Commented Apr 3, 2012 at 17:44
  • 1
    @fgcartographix, I updated the code to handle the case where the table already exists and has rows in it (e.g. the script ran, and inserted some rows, but then bombed). Commented Apr 3, 2012 at 17:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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