Подтвердить что ты не робот

Чтение довольно больших json файлов в Python

Возможный дубликат:
Есть ли эффективный и быстрый способ загрузки больших json файлов в python?

Итак, у меня есть довольно большие json-кодированные файлы. Самый маленький - 300 МБ, но это, безусловно, самый маленький. Остальные - несколько GB, от 2 до 10GB +.

Таким образом, я пытаюсь загрузить файл с Python. В настоящее время я просто запускаю некоторые тесты, чтобы посмотреть, как долго будет работать этот материал, чтобы посмотреть, куда идти дальше. Вот код, который я использую для тестирования:

from datetime import datetime
import json

print datetime.now()

f = open('file.json', 'r')
json.load(f)
f.close()

print datetime.now()

Не удивительно, что Python дает мне MemoryError. Похоже, что json.load() вызывает json.loads(f.read()), который пытается сначала выгрузить весь файл в память, что явно не сработает.

В любом случае я могу решить эту проблему чисто?

Я знаю, что это старо, но я не думаю, что это дубликат. Хотя ответ тот же, вопрос другой. В "дубликате" вопрос заключается в том, как эффективно читать большие файлы, тогда как этот вопрос касается файлов, которые вообще не вписываются в память. Эффективность не требуется.

4b9b3361

Ответ 1

Проблема здесь в том, что JSON, как формат, обычно анализируется полностью, а затем обрабатывается в памяти, что для такого большого объема данных явно проблематично.

Решением этой проблемы является работа с данными в виде потока - чтение части файла, работа с ним, а затем повторение.

Лучше всего использовать что-то вроде ijson - модуль, который будет работать с JSON как поток, а не как файл блока.

Изменение: Также стоит посмотреть - kashif комментарий о json-streamer streamer и Henrik Heino комментарий о bigjson.