Вопрос по python, json – Открытие большого файла JSON в Python

8

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

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

РЕДАКТИРОВАТЬ: Хорошо, если это всего лишь один большой массив объектов и заранее известна структура объектов, то нет необходимости использовать инструменты, которые мы могли бы читать его построчно. Строка будет содержать только один элемент массива. Я заметил, что это способ хранения файлов JSON, для меня это работало как просто

>>>for line in open('file.json','r').readline():
...    do something with(line) 
Что вы пытаетесь сделать с данными? Откуда это взялось? Karl Knechtel
Мне, вероятно, следует хранить их в разных файлах, но я этого не делал :( Я хочу использовать эти данные для анализа настроений. Hirak Sarkar
Почему у вас такой огромный файл JSON? Формат, который почти всегда читается в память в целом, в значительной степени не подходит для таких больших структур, как этот. Рассмотрите возможность хранения ваших данных в базе данных. ThiefMaster♦

Ваш Ответ

3   ответа
1

yajl библиотека, котораяijson.

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

yajl-py did not detect yajl library on my system, I had to hack the code in order to make it work ijson code is more compact and easier to use ijson can work with both yajl v1 and yajl v2, and it even has pure python yajl replacement ijson has very nice ObjectBuilder, which helps extracting not just events but meaningful sub-objects from parsed stream, and at the level you specify
0

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

http://pietrobattiston.it/jsaone

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

10

yajl и одна из его привязок Python. Инкрементный синтаксический анализатор читает как можно меньше из входных данных и вызывает обратный вызов, когда что-то значимое декодируется. Например, чтобы извлечь только цифры из большого файла 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/ для получения дополнительной информации.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Hirak Sarkar
Error: User Rate Limit Exceeded Hirak Sarkar
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Hirak Sarkar

Похожие вопросы