[FWTools] edit shapefile attributes with Python

Bryan Keith bryan at geomega.com
Tue Aug 15 17:14:06 EDT 2006


Ken,

Doh.  Thanks.  I do that when I create a shapefile and add to it.  Why 
didn't I put that in here?!  That fixed my problem.  Thanks for the help.

Bryan

Ken Boss wrote:
> Bryan--
> 
> I believe you may need to:
> 
> dsRiver.Destroy()
> 
> after your edits in order to get them written out to disk.
> 
> HTH,
> 
> --Ken
> 
>>>> Bryan Keith <bryan at geomega.com> 8/15/2006 3:36:37 PM >>>
> Frank Warmerdam wrote:
>> Bryan Keith wrote:
>>> Hello,
>>>
>>> I'm simply trying to edit the attributes of a shapefile with Python.
>  I 
>>> have no trouble creating a new shapefile, creating new features, and
> 
>>> adding them to the shapefile.  However, now I just want to edit 
>>> attributes of the dbf.   Here's my simple script:
>>>
>>> import ogr
>>> #get the stream
>>> ogrdriver = ogr.GetDriverByName("ESRI Shapefile")
>>> dsRiver = ogrdriver.Open("test_py.shp")
>>> mRiverLayer = dsRiver.GetLayerByName("test_py")
>>> mFeature = mRiverLayer.GetFeature(0)
>>> iIndex = mFeature.GetFieldIndex("RIVER_MILE")
>>> mFeature.SetField(iIndex, 100.1)
>>> mRiverLayer.SetFeature(mFeature)
>>>
>>> which gives me this error:
>>>
>>> ERROR 3: Error in fseek() or fwrite() writing object to .shp file.
>>>
>>> Is attribute updating supported in shapefiles?  What am I doing
> wrong? 
>>> Thanks for the help.
>> Brian,
>>
>> I'm not sure if this got answered already or not.
>> Try opening the file in update mode.
>>
>> eg.
>>
>>   import ogr
>>  > #get the stream
>>  > ogrdriver = ogr.GetDriverByName("ESRI Shapefile")
>>  > dsRiver = ogrdriver.Open("test_py.shp",1)
>>
> 
> Frank,
> 
> Thanks.  That's one of the things that I tried after posting my
> message. 
>   It doesn't help, however.  I no longer get the error message.  The 
> .shp file has a new timestep, but the .dbf doesn't, and the attribute 
> didn't change.
> 
> Here's the simple code, and the ogrinfo output after running the code:
> 
> import ogr
> ogrdriver = ogr.GetDriverByName("ESRI Shapefile")
> dsRiver = ogrdriver.Open("test_py.shp", 1)
> mRiverLayer = dsRiver.GetLayerByName("test_py")
> mFeature = mRiverLayer.GetFeature(0)
> iIndex = mFeature.GetFieldIndex("RIVER_MILE")
> mFeature.SetField(iIndex, 100.1)
> mRiverLayer.SetFeature(mFeature)
> 
> ogrinfo -sql "select RIVER_MILE from test_py" test_py.shp -al
> INFO: Open of `test_py.shp'
>        using driver `ESRI Shapefile' successful.
> 
> Layer name: test_py
> Geometry: Polygon
> Feature Count: 1
> Extent: (492238.723643, 664969.987499) - (526881.068923,
> 692475.373737)
> Layer SRS WKT:
> (unknown)
> RIVER_MILE: Real (10.3)
> OGRFeature(test_py):0
>    RIVER_MILE (Real) =   -999.900
> 
> I also tried enclosing the edit in .StartTransaction() and 
> .CommitTransaction(), and I tried .SyncToDisk(), but those didn't
> help.
> 
> Bryan
> _______________________________________________
> FWTools mailing list
> FWTools at lists.maptools.org 
> http://lists.maptools.org/mailman/listinfo/fwtools 
> http://fwtools.maptools.org/
> 
> 


More information about the FWTools mailing list