Ошибка памяти на большом Shapefile в Python
import shapefile
data = shapefile.Reader("data_file.shp")
shapes = data.shapes()
Моя проблема в том, что получение форм из читателя Shapefile дает мне исключение MemoryError
при использовании пышп.
.shp
Файл довольно большой, в 1.2 ГБ. Но я использую только 3% от 32 ГБ моей машины, поэтому я не понимаю этого.
Есть ли другой подход, который я могу использовать? Может обработать файл кусками в Python? Или использовать какой-либо инструмент, чтобы разложить файл на чинки, а затем обработать каждый из них по отдельности?
2 ответа
Хотя я не смог проверить это, Pyshp должен иметь возможность читать его независимо от размера файла или ограничений памяти. Создание Reader
Экземпляр не загружает весь файл, только информацию заголовка.
Кажется, проблема в том, что вы использовали shapes()
метод, который считывает всю информацию о форме в память одновременно. Обычно это не проблема, но с такими большими файлами. Как правило, вы должны вместо этого использовать iterShapes()
метод, который читает каждую фигуру по одному.
import shapefile
data = shapefile.Reader("data_file.shp")
for shape in data.iterShapes():
# do something...
Цитируя из этого ответа Томас:
MemoryError
Исключение, которое вы видите, является прямым результатом нехватки доступной оперативной памяти. Это может быть вызвано либо ограничением в 2 ГБ на программу, установленным Windows ( 32-разрядные программы), либо отсутствием доступной оперативной памяти на вашем компьютере. (Эта ссылка на предыдущий вопрос). Вы должны иметь возможность расширить 2 ГБ, используя 64-битную копию Python, при условии, что вы используете 64-битную копию Windows.
Поэтому попробуйте 64-битную копию Python или предоставьте более подробную информацию о вашей платформе и версиях Python.