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

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

.shp文件非常大,为 1.2 GB。但是我只使用了我机器 32gB 的 3%,所以我不明白。

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

4

2 回答 2

3

引用托马斯的这个答案

您看到的MemoryError异常是可用 RAM 用完的直接结果。这可能是由于 Windows(32 位程序)施加的每个程序限制为 2GB,或者您的计算机上缺少可用 RAM。(此链接指向上一个问题)。如果您使用的是 Windows 的 64 位副本,您应该能够使用 64 位的 Python 副本来扩展 2GB。

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

于 2016-09-22T12:57:06.340 回答
1

尽管我无法对其进行测试,但无论文件大小或内存限制如何,Pyshp 都应该能够读取它。创建Reader实例不会加载整个文件,只会加载头信息。

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

import shapefile
data = shapefile.Reader("data_file.shp")
for shape in data.iterShapes():
    # do something...
于 2016-09-22T21:57:31.557 回答