2015-01-21 3 views
2

У меня есть большой json-файл. Его данные журнала и я сжал его в формате bz2 (myfile.json.bz2). Размер файла bz2 составляет 90 МБ. Я искал, чтобы найти хорошее решение или сообщение в блоге, которое объясняет синтаксический анализ сжатого файла bz2 json эффективно, но не удалось найти.Python: Разбор большого json-файла

Поскольку файл большой, делать что-то подобное невозможно.

with open('data.json') as data_file:  
    data = json.load(data_file) 

Какой лучший подход?

Через некоторое копаться я нашел там питон пакет читать BZ2

input_file = bz2.BZ2File(filename, 'r') 
+2

Вы хотите инкрементный json-парсер, например. см. этот ответ: [(link)] (http://stackoverflow.com/a/10715686/866915) Другая возможность такова: [(link)] (https://github.com/nigelsmall/jsonstream) – ErikR

+0

с ' BZ2File' имеет метод 'read', который возвращает произвольное количество байтов, я бы, вероятно, подумал о том, чтобы попытаться прочитать json как поток, с чем-то вроде https://pypi.python.org/pypi/ijson/ – njzk2

ответ

1

В отсутствие каких-либо других предложений или существующий код, который я рекомендовал бы открыть поток вручную разборе скобки и скобки ({ и [ соответственно), пока вы не получите полный объект { ... } и выполните десериализацию. Это позволит вам блокировать JSON при использовании существующих библиотек JSON.

Это не решение, которое я бы рекомендовал, но это самое быстрое и надежное решение, о котором я могу думать, если существующие библиотеки не подходят для ваших нужд.

+3

Это было бы проще и безопаснее использовать инкрементный парсер JSON, такой как http://pykler.github.io/yajl-py/, вместо того, чтобы самому разобраться. –

+0

А, я не знал об этой библиотеке. –

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