OGR – How to Change Shapefile Field Names Using OGR AlterFieldDefn

fields-attributesogrpythonshapefile

I need to change field names of a shapefile to upper case using ogr. I want to do this automatically, versus calling out each field and replacing the name with upper case. When I try to implement using layer AlterFieldlDefn, I get a TypeError. Here is the code I am using:

Shapefile = r"C:\test.shp"
driver = ogr.GetDriverByName('ESRI Shapefile')
dataSource = driver.Open(Shapefile, 1) 

if dataSource is None:
    print 'Could not open %s' % (Shapefile)
else:
    print 'Opened %s' % (Shapefile)
    layer = dataSource.GetLayer()
    layer_defn = layer.GetLayerDefn()
    for i in range(layer_defn.GetFieldCount()):
        print layer_defn.GetFieldDefn(i).GetName()
        uppercase_name = layer_defn.GetFieldDefn(i).GetName().upper()
        layer.AlterFieldDefn(i, uppercase_name, 1)

The error I get is this:

TypeError: in method 'Layer_AlterFieldDefn', argument 3 of type
'OGRFieldDefnShadow

How do I correctly uses AlterFieldDefn to change the field names to upper case? I do not have ArcGIS 10.2, so AlterField_management is not an option.

Best Answer

Although this post is quite old, I was facing a similar problem and sloved it like this:

layerDefn = layer.GetLayerDefn()
for i in range(layerDefn.GetFieldCount()):
    fieldDefn = layerDefn.GetFieldDefn(i)
    fieldName = fieldDefn.GetName()
    fieldDefn.SetName(fieldName.upper())