2012-05-23 8 views
8

У меня есть файл JSON 1,7 ГБ, когда я пытаюсь открыть с помощью json.load(), тогда он дает ошибку памяти. Как читать json-файл в python?Открытие большого файла JSON в Python

My JSON file - это большой массив объектов, содержащих определенные ключи.

EDIT: Хорошо, если это всего лишь один большой массив объектов, и заранее известна структура объектов, тогда нет необходимости использовать инструменты, которые мы могли бы читать по строкам. Строка будет содержать только один элемент массива. Я заметил, что это путь JSON файлы сохраняются, для меня он работал, как только

>>>for line in open('file.json','r').readline(): 
... do something with(line) 
+1

Почему у вас такой огромный файл JSON? Формат, который почти всегда читается в памяти в целом, практически не подходит для таких крупных структур. Рассмотрите возможность хранения данных в базе данных. – ThiefMaster

+0

Что вы пытаетесь сделать с данными? От куда это? –

+0

Я, вероятно, должен хранить их в разных файлах, но не сделал этого :(, я хочу использовать эти данные для анализа настроений. –

ответ

10

Вы хотите добавочное JSon анализатор как yajl и один из его питона привязок. Инкрементный синтаксический анализатор читает как можно меньше от ввода и вызывает обратный вызов, когда что-то значимое декодируется. Например, чтобы вытащить только номера из большого файла JSon:

class ContentHandler(YajlContentHandler): 
    def yajl_number(self, ctx, val): 
     list_of_numbers.append(float(val)) 

parser = YajlParser(ContentHandler()) 
parser.parse(some_file) 

Смотрите http://pykler.github.com/yajl-py/ для получения дополнительной информации.

+0

Мой json-файл - это один большой массив объектов, который помогает мне разобрать? –

+1

@ ХиракСаркар: да. Вам нужно будет определить соответствующие обратные вызовы в вашем классе ContentHandler. – georg

+0

У меня возникла проблема с проводкой после установки yajl с помощью easy_install в оболочке python, она сообщает об ошибке, что модуля yajl нет. Что мне делать. Моя версия python - 2.6. –

1

Я нашел еще одну обертку python около yajl библиотека, которая является ijson.

Он работает лучше для меня, чем yajl-py в силу следующих причин:

  • yajl-ру не обнаружили библиотеку yajl в моей системе, я должен был взломать код, чтобы заставить его работать
  • ijson код более компактный и простой в использовании
  • ijson может работать как с yajl v1 и v2 yajl, и даже имеет чистого питон замена yajl
  • ijson имеет очень хороший ObjectBuilder, который помогает извлекая п ВЗ только события, но значимые суб-объекты из разобранного потока, так и на уровне вы задаете
0

Я нашел yajl (отсюда ijson) будет гораздо медленнее, чем модуль json, когда большой файл данных был доступ с локального диска. Вот это модуль, который утверждает, что лучше, чем yajl/ijson (еще медленнее, чем json), при использовании с Cython:

http://pietrobattiston.it/jsaone

Как указывает автор, производительность может быть лучше, чем json когда файл полученной по сети, поскольку инкрементный синтаксический анализатор может начать синтаксический анализ раньше.

Смежные вопросы