I am looking to do a simple append using Pyshp and keep running into walls. The editor object could not read the dbf header for the input shapefile so I tried using reader and writer as suggested but have run into some problems with writer.
Initially I wanted to copy entire ShapeRecord objects but did not see a way to use writer to write them, so I tried a more granular approach like iterating and copying shape and record attributes which failed as well:
reader = shapefile.Reader('c:/temp/input.shp') #Open input file
w = shapefile.Writer(shapefile.POLYGON) #Create writer
w.field('FLD1','C','20') #Create fields
w.field('FLD2','C','20')
w.field('FLD3','C','20')
w.field('FLD4','C','20')
w.field('FLD5','N','20')
w.field('FLD6','N','20')
w.field('FLD7','C','20')
for sr in reader.shapeRecords(): #iterate through shapeRecords in the input
w.poly(sr.shape) #write shape to writer
w.record(sr.record) #write record to writer
w.save('c:/temp/appendoutput.shp') #save writer to file
I end up with two errors:
IndexError: tuple index out of range for
w.record(sr.record)
File "C:\Python26\ArcGIS10.0\lib\shapefile.py", line 959, in record [record.append(recordList[i]) for i in range(fieldCount)]
This perplexes me since print sr.record shows me that there are seven items in the record list that was read in by the reader and I have seven fields.TypeError: iteration over non-sequence for the
w.poly(sr.shape)