Thanks to a rather brain-dead format called DBF, adding fields to shapefiles with existing attribute data isn't possible without rewriting or adding padding to the DBF. I don't know of a ready-made solution, but what I would do is write a script to create a new shapefile based on an existing one and add the extra field(s) to the new shapefile. Then copy the geometry/attribute data from old to new shapefile. And as a final step, remove the old shapefile, and rename the new one. All of this is fairly easily accomplished using OGR python bindings.
Alternately, you can use dbfpy to do the above with just the DBF file. Order of steps remains the same:
- Create a new DBF with identical structure to original
- Create new attribute fields in the new DBF
- Copy data from original DBF to new DBF
- Remove old DBF, rename new DBF to old DBF
You don't need to make any changes to the shapefile (.shp) itself or any of the other files, as they do not reference attribute information contained in the DBF. You do however need to keep the order of records exactly the same in the old and the new DBF.