Ошибка памяти на большом 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.

Другие вопросы по тегам