Python中大型Shapefile的内存错误

时间:2016-09-22 12:50:24

标签: python shapefile pyshp

import shapefile
data = shapefile.Reader("data_file.shp")
shapes = data.shapes()

我的问题是,使用Pyshp时,从Shapefile阅读器获取形状会给我一个例外MemoryError

.shp文件相当大,为1.2 gB。但我使用机器32gB的3%,所以我不明白。

我可以采取其他方法吗?可以在Python中以块的形式处理文件吗?或者使用一些工具将文件溢出到chinks中,然后单独处理它们?

2 个答案:

答案 0 :(得分:3)

托马斯从this answer引用:

  

您看到的MemoryError异常是可用RAM耗尽的直接结果。这可能是由Windows(32bit programs)施加的每个程序限制2GB或计算机上缺少可用RAM造成的。 (这个link是前一个问题)。如果您使用64位的Windows副本,则应该可以使用64位的Python副本扩展2GB。

因此,请尝试64位的Python副本,或提供有关您的平台和Python版本的更多详细信息。

答案 1 :(得分:1)

虽然我无法测试它,但无论文件大小或内存限制如何,Pyshp都应该能够读取它。创建Reader实例不会加载整个文件,只会加载标题信息。

这里的问题似乎是您使用shapes()方法,它会立即将所有形状信息读入内存。这通常不是问题,但它与文件这么大。作为一般规则,您应该使用iterShapes()方法逐个读取每个形状。

import shapefile
data = shapefile.Reader("data_file.shp")
for shape in data.iterShapes():
    # do something...