У меня есть доступ к набору файлов (около 80-800 мб каждый). К сожалению, в каждом файле есть только одна строка. Строка содержит ровно один объект JSON (список списков). Каков наилучший способ загрузить и проанализировать его на более мелкие объекты JSON?Каков наилучший способ загрузки больших списков JSON в Python?
ответ
Существует аналогичное сообщение here. Вот решение они предложили:
import json
with open('file.json') as infile:
o = json.load(infile)
chunkSize = 1000
for i in xrange(0, len(o), chunkSize):
with open('file_' + str(i//chunkSize) + '.json', 'w') as outfile:
json.dump(o[i:i+chunkSize], outfile)
убил, это то, что говорит оболочка python – ashish
Если вы пытаетесь избежать загрузок всего списка в память, можно обработать файл как текст первым:
Используйте стек для отслеживания открытого и закрытие скобок/кавычек. Сканирование через строку для любого из открывающих устройств или текущего ближе. При сканировании через текст посмотрите только текст ближе. Нажимайте один, когда вы читаете открыватель, и вытащите его, когда найдете ближе.
Полный набор для JSON является [
->]
, {
->}
и "
->"
. Вы должны исключить \"
. Вы можете проверить спецификацию на http://www.json.org/
Тогда всякий раз, когда ]
встречаются и стек имеет только один пункт (верхний уровень «[») после выскакиваю соответтсвующие [
, то вы знаете, что пришло время, чтобы начать новую строку.
И, наконец, вы должны убедиться, что первые [
и последние ]
не отображаются в вашем выводе.
Это даст вам отдельные объекты JSON для каждого элемента списка, каждый из которых находится в отдельной строке файла.
Если вы копаетесь в библиотеке JSON python, должны быть некоторые функции, которые также разбирают JSON. Вы можете использовать их, даже если они не являются частью публичного интерфейса.
Конечно, вы можете достичь этого, загрузив строку с использованием библиотеки JSON, а затем сбросив ее по элементам (или нескольким элементам) в соответствии с другим ответом.
Зачем нужен такой подход к низкоуровневому сканированию, когда совершенно хороший модуль json поставляется со стандартной lib? См. Ответ @ linker – jdi
Я предполагаю, что он не хочет иметь накладные расходы памяти, поскольку объект json фактически хранится в памяти. открытый интерфейс библиотеки json этого не позволяет. Я даже упоминаю, что он мог взломать эту библиотеку и использовать некоторые вспомогательные функции, хотя я и не видел их. – chees
Да, но проблема с памятью не является проблемой для одноразовой пакетной обработки, как это предлагается в другом ответе. Это не должно быть производственным решением, чтобы просто доставить его до более мелких объектов. – jdi
Модуль pandas 0.21.0
теперь поддерживает chunksize как часть read_json
. Вы можете загружать и управлять один кусок за один раз:
import pandas as pd
chunks = pd.read_json(file, lines=True, chunksize = 100)
for c in chunks:
print(c)
- 1. Каков наилучший способ загрузки фрагмента?
- 2. Каков наилучший способ резервного копирования больших объектов?
- 3. Каков наилучший способ слияния больших файлов?
- 4. Каков наилучший способ загрузки файла JSON в машинопись?
- 5. Каков наилучший способ пересечения этих двух списков?
- 6. Каков наилучший способ отслеживания реляционных списков объектов
- 7. Лучший способ эффективной загрузки больших списков
- 8. Каков наилучший способ загрузки изображений в очередь
- 9. Каков наилучший способ сделать это в Python?
- 10. Каков наилучший способ преобразования структуры в Json?
- 11. Каков наилучший способ загрузки пользовательских элементов ASP.Net через JSON?
- 12. Каков наилучший способ обработки словарей в python?
- 13. Каков наилучший способ хранения больших данных сеанса в веб-приложениях?
- 14. Каков наилучший способ обработки json в monotouch
- 15. Каков наилучший способ перебрать массив в JSON?
- 16. Лучший способ поддержки больших выпадающих списков
- 17. Каков наилучший способ загрузки/выбора классов «контроллера»
- 18. Каков наилучший способ загрузки пользовательского UIView?
- 19. Каков наилучший способ загрузки многих видеороликов YouTube?
- 20. Каков наилучший способ загрузки изображений через nginx?
- 21. Каков наилучший способ работы с объектом JSON?
- 22. Каков наилучший способ разобрать ответ JSON из библиотеки запросов?
- 23. Каков наилучший способ установки python на Windows
- 24. Способ вычисления больших списков
- 25. Каков наилучший способ обработки HTML в Python?
- 26. Каков наилучший способ обратного сортировки в python?
- 27. Каков наилучший способ обработки XML в Python?
- 28. Каков наилучший способ сортировки последовательности в Python?
- 29. Каков наилучший способ инициализации диктофона в Python?
- 30. Каков наилучший способ синхронизации больших объемов данных по всему миру?
Я полагаю, вы, по крайней мере, считается [стандартный модуль JSON] (http://docs.python.org/library/json.html). – C2H5OH
Возможный дубликат [Split 95mb JSON массив в меньшие куски?] (Http://stackoverflow.com/questions/7052947/split-95mb-json-array-into-smaller-chunks) –
@ C2H5OH - да, я пытаясь не загружать всю вещь в память. –