import shapefile
data = shapefile.Reader("data_file.shp")
shapes = data.shapes()
我的问题是,使用Pyshp时,从Shapefile阅读器获取形状会给我一个例外MemoryError
。
.shp
文件相当大,为1.2 gB。但我使用机器32gB的3%,所以我不明白。
我可以采取其他方法吗?可以在Python中以块的形式处理文件吗?或者使用一些工具将文件溢出到chinks中,然后单独处理它们?
答案 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...