通过新的Writer对象在Python中编辑shapefile是不行

时间:2017-12-22 23:27:27

标签: python gis shapefile

我目前正在阅读Joel Lawhead撰写的Python地理空间分析教程书,并且在尝试编辑shapefile时遇到了错误。

我使用的shapefile可用http://git.io/vLd8Y。我在python3上的Jupyter笔记本中运行我的代码。

这是我的代码。我只是将shapefile作为Reader对象r读取,并创建一个与w具有相同形状类型的新Writer对象r。然后,我尝试将记录从r附加到w

import shapefile
r = shapefile.Reader("NYC_MUSEUMS_GEO")
w = shapefile.Writer(r.shapeType)
w.fields = list(r.fields)
w.records.extend(r.records())

但是,我遇到了这个错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-151-ceee096fbafa> in <module>()
      6 w = shapefile.Writer(r.shapeType)
      7 w.fields = list(r.fields)
----> 8 w.records.extend(r.records())

AttributeError: 'Writer' object has no attribute 'records'

任何想法为什么?

2 个答案:

答案 0 :(得分:0)

我无法重现您所描述的问题。我开始时:

$ python
Python 3.5.4 (default, Oct  9 2017, 12:07:29) 
>>>

并安装pyshp模块:

$ pip install pyshp
...
Successfully installed pyshp-1.2.12

现在:

$ python
Python 2.7.13 (default, Dec  1 2017, 09:21:53) 
[GCC 6.4.1 20170727 (Red Hat 6.4.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import shapefile
>>> r = shapefile.Reader("NYC_MUSEUMS_GEO")
>>> w = shapefile.Writer(r.shapeType)
>>> w.fields = list(r.fields)
>>> w.records.extend(r.records())
>>> len(w.records)
130

您使用的pythonpyshp版本与我使用的版本相匹配吗?如果没有,您能否更新您的问题以包含您环境的具体细节?

答案 1 :(得分:0)

我一直遇到同样的问题。在新版本的pyshp中似乎无法再使用w.records.extend(r.records())。现在正确的方法是:

for shaperec in r.iterShapeRecords():
   w.record(*shaperec.record)
   w.shape(shaperec.shape)

请查看上述代码here的更改说明和更多上下文。