Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中大型Shapefile的内存错误_Python_Shapefile_Pyshp - Fatal编程技术网

Python中大型Shapefile的内存错误

Python中大型Shapefile的内存错误,python,shapefile,pyshp,Python,Shapefile,Pyshp,我的问题是,从Shapefile阅读器获取形状时,使用时会出现异常MemoryError .shp文件相当大,为1.2GB。但是我只使用了我机器32gB的3%,所以我不明白 我还可以采取其他方法吗?可以在Python中分块处理文件吗?或者使用一些工具将文件分为多个缝隙,然后分别处理每个缝隙?引用thomas的话: 您看到的MemoryError异常是可用RAM耗尽的直接结果。这可能是由于Windows()对每个程序施加了2GB的限制,或者计算机上缺少可用RAM造成的。(这是对上一个问题的回答)。

我的问题是,从Shapefile阅读器获取形状时,使用时会出现异常
MemoryError

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

我还可以采取其他方法吗?可以在Python中分块处理文件吗?或者使用一些工具将文件分为多个缝隙,然后分别处理每个缝隙?

引用thomas的话:

您看到的
MemoryError
异常是可用RAM耗尽的直接结果。这可能是由于Windows()对每个程序施加了2GB的限制,或者计算机上缺少可用RAM造成的。(这是对上一个问题的回答)。如果您使用的是64位的windows副本,那么您应该能够通过使用64位的Python副本来扩展2GB

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

引用thomas的话:

您看到的
MemoryError
异常是可用RAM耗尽的直接结果。这可能是由于Windows()对每个程序施加了2GB的限制,或者计算机上缺少可用RAM造成的。(这是对上一个问题的回答)。如果您使用的是64位的windows副本,那么您应该能够通过使用64位的Python副本来扩展2GB


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

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

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

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

虽然我还没有能够测试它,但Pyshp应该能够读取它,而不管文件大小或内存限制如何。创建
读卡器
实例不会加载整个文件,只加载头信息

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

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

尽管可能是对的,这更多的是一个评论而不是一个答案。。。一行半是个问题?我没有足够的评分来评论,但我还是想帮助尼克,你可能是对的。我怎么说?当我运行interperter时,我看到win32上的Python 2.7.11(v2.7.11:6D1B6A68F7752015年12月5日,20:32:19)[MSC v.1500 32位(英特尔)]这个问题给了我答案,是的,我只有32位(d'oh!)。谢谢,尼克,欢迎来到我们不应该说“谢谢”的网站-/请看@Nick_Gabbe抱歉,如果我听起来像个混蛋,我确实投了赞成票,但仍然认为答案值得改进。尽管可能是正确的,但这更多的是一个评论而不是一个答案。。。一行半是个问题?我没有足够的评分来评论,但我还是想帮助尼克,你可能是对的。我怎么说?当我运行interperter时,我看到win32上的Python 2.7.11(v2.7.11:6D1B6A68F7752015年12月5日,20:32:19)[MSC v.1500 32位(英特尔)]这个问题给了我答案,是的,我只有32位(d'oh!)。谢谢,尼克,欢迎来到我们不应该说“谢谢”的网站-/See@Nick\u gabbe抱歉,如果我听起来像个混蛋,我投了赞成票,但仍然认为答案值得改进。我可以确认问题不在于对象的创建,而在于
shapes()
方法。然而,问题是我使用的是32位Python,它只能处理32gB的RAM。当我安装64机器人版本时,问题就消失了。但是,如果
iterShapes()
方法一次只将一个形状加载到内存中,那么,当然,我将使用它,我可以确认问题不在于对象的创建,而在于
shapes()
方法。然而,问题是我使用的是32位Python,它只能处理32gB的RAM。当我安装64机器人版本时,问题就消失了。但是,如果
iterShapes()
方法一次只将一个形状加载到内存中,那么我当然会使用它