Python 中大型 Shapefile 的内存错误
Memory error on large Shapefile in Python
import shapefile
data = shapefile.Reader("data_file.shp")
shapes = data.shapes()
我的问题是从 Shapefile reader 获取形状在使用 Pyshp.
时出现异常 MemoryError
.shp
文件很大,有 1.2 gB。但是我只使用了我机器32gB的3%,所以我不明白。
我还有其他方法可以采用吗?可以在 Python 中分块处理文件吗?或者使用一些工具将文件溢出到裂缝中,然后分别处理它们?
引自托马斯 this answer:
The MemoryError
exception that you are seeing is the direct result of running out of available RAM. This could be caused by either the 2GB per program limit imposed by Windows (32bit programs), or lack of available RAM on your computer. (This link is to a previous question). You should be able to extend the 2GB by using 64bit copy of Python, provided you are using a 64bit copy of windows.
因此请尝试 Python 的 64 位副本或提供有关您的平台和 Python 版本的更多详细信息。
虽然我没能测试它,但不管文件大小或内存限制,Pyshp 应该都能读取它。创建 Reader
实例不会加载整个文件,只会加载 header 信息。
这里的问题似乎是你使用了shapes()
方法,它一次将所有形状信息读入内存。这通常不是问题,但对于这么大的文件来说却是个问题。作为一般规则,您应该改为使用 iterShapes()
方法逐个读取每个形状。
import shapefile
data = shapefile.Reader("data_file.shp")
for shape in data.iterShapes():
# do something...
import shapefile
data = shapefile.Reader("data_file.shp")
shapes = data.shapes()
我的问题是从 Shapefile reader 获取形状在使用 Pyshp.
时出现异常MemoryError
.shp
文件很大,有 1.2 gB。但是我只使用了我机器32gB的3%,所以我不明白。
我还有其他方法可以采用吗?可以在 Python 中分块处理文件吗?或者使用一些工具将文件溢出到裂缝中,然后分别处理它们?
引自托马斯 this answer:
The
MemoryError
exception that you are seeing is the direct result of running out of available RAM. This could be caused by either the 2GB per program limit imposed by Windows (32bit programs), or lack of available RAM on your computer. (This link is to a previous question). You should be able to extend the 2GB by using 64bit copy of Python, provided you are using a 64bit copy of windows.
因此请尝试 Python 的 64 位副本或提供有关您的平台和 Python 版本的更多详细信息。
虽然我没能测试它,但不管文件大小或内存限制,Pyshp 应该都能读取它。创建 Reader
实例不会加载整个文件,只会加载 header 信息。
这里的问题似乎是你使用了shapes()
方法,它一次将所有形状信息读入内存。这通常不是问题,但对于这么大的文件来说却是个问题。作为一般规则,您应该改为使用 iterShapes()
方法逐个读取每个形状。
import shapefile
data = shapefile.Reader("data_file.shp")
for shape in data.iterShapes():
# do something...