-1

我有一个要编辑的 ESRI shapefile .shp(包含所有相关文件.shx,例如.dbf等等) - 我需要删除第一条记录并保存文件。

为此,我安装pyshp并尝试解析和编辑 shapefile。这是我尝试过的:

import shapefile
e = shapefile.Editor('location/of/my/shp')
e.shapes()
# example output
>>> [<shapefile._Shape instance at 0x7fc5e18d93f8>,
     <shapefile._Shape instance at 0x7fc5e18d9440>,
     <shapefile._Shape instance at 0x7fc5e18d9488>,
     <shapefile._Shape instance at 0x7fc5e18d94d0>,
     <shapefile._Shape instance at 0x7fc5e18d9518>]

从这里我想删除第一个条目<shapefile._Shape instance at 0x7fc5e18d93f8>,然后保存文件:

e.delete(0) # I tried e.delete(shape=0) too
e.save()

但是,该记录在新保存的文件中仍然可用。

不幸的是,文档并没有深入讨论这些事情。

我怎样才能实现我的目标?保存文件前如何检查删除是否成功?

4

2 回答 2

1

完全按照您所描述的程序对我来说似乎工作得很好。我首先打开一个 shapefile:

>>> e = shapefile.Editor('example')

该文件具有三种形状:

>>> e.shapes()
[<shapefile._Shape instance at 0x7f6cb5f67dd0>, <shapefile._Shape instance at 0x7f6cb5f67f38>, <shapefile._Shape instance at 0x7f6cb5f6e050>]

我删除第一个形状并保存文件:

>>> e.delete(0)
>>> e.save('example')

现在我重新打开文件:

>>> e = shapefile.Editor('example')

我可以看到它现在只有两种形状:

>>> e.shapes()
[<shapefile._Shape instance at 0x7f6cb5f6e518>, <shapefile._Shape instance at 0x7f6cb5f6e560>]
于 2018-01-09T13:18:38.517 回答
0

我不熟悉,pyshp但这可以使用 轻松解决ogr,它允许使用矢量数据并成为gdal库的一部分。

from osgeo import ogr

fn = r"file.shp"  # The path of your shapefile
ds = ogr.Open(fn, True)  # True allows to edit the shapefile
lyr = ds.GetLayer()

print("Features before: {}".format(lyr.GetFeatureCount()))
lyr.DeleteFeature(0)  # Deletes the first feature in the Layer

# Repack and recompute extent
# This is not mandatory but it organizes the FID's (so they start at 0 again and not 1)
# and recalculates the spatial extent.
ds.ExecuteSQL('REPACK ' + lyr.GetName())
ds.ExecuteSQL('RECOMPUTE EXTENT ON ' + lyr.GetName())

print("Features after: {}".format(lyr.GetFeatureCount()))

del ds
于 2018-01-09T13:23:12.593 回答