# Update Cursor for a list of shp

276
2
11-04-2018 07:41 PM
New Contributor II

Hello,

I want to add the data source (path name) to each attribute table . All of them were compiled from many folders so it's quite important for us to keep track. I'm quite new to python and I'm having trouble applying the update cursor function to populate the path name into the attribute table of each layer. This is what I have so far and I'm getting the error of 'in_table' is not a table or a featureclass. So I understand the list named 'FeatureClasses' is not a valid input for the update cursor function. How can I fix the code so it iterates through each shp listed in my mxd?

mxd= arcpy.mapping.MapDocument (r"path.mxd")

#List with all the shp in the mxd
FeatureClasses = arcpy.mapping.ListLayers (mxd)

# Add a field to each shp
for fc in FeatureClasses():
arcpy.AddField_management(fc, "Path", "TEXT", field_length = 250)

#Update attribute table with their pathnames
for fc in FeatureClasses:
# pull out the shapefile name
shpName = layer.dataSource
# define update cursor
with arcpy.da.UpdateCursor(FeatureClasses, ("Path")) as cursor:
for row in cursor:
# set Path to the shapefile name for each row
row[0] = shpName
cursor.updateRow(row)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

I also tried this other code that I found online and shows no errors but the field 'Path' it's still blank. When I print the 'Test' list it's also blank.

Test = arcpy.ListFeatureClasses("*.shp")
print Test
[]

Test = arcpy.ListFeatureClasses("*.shp")
for calc in Test:
# pull out the shapefile name
shpName = os.path.abspath
# define update cursor
with arcpy.da.UpdateCursor(calc, ("Path")) as cursor:
for row in cursor:
# set 'Path' to the shapefile name for each row
row[0] = shpName
cursor.updateRow(row) ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Tags (1)
2 Replies
MVP Esteemed Contributor

why do you need to use arcpy mapping in the first example?

in the second example you need to establish a workspace from the start

arcpy.env.workspace = r"C:\path\to\a_folder"

MVP Esteemed Contributor

I think your second example is the better approach.  As Dan already pointed out, you will need to set the workspace before trying to list feature classes.  Also, you will need to use os.path.join to create a full path for the update cursor, and your use of os.path.abspath is incorrect.  Take a look at the code samples in ListFeatureClasses—Help | ArcGIS Desktop