2016-09-06 3 views
2

Я пытался записать большое количество (> 800 Мбайт) данных в файл JSON; Я сделал некоторое изрядное количество проб и ошибок, чтобы получить этот код:Как написать большие данные JSON?

def write_to_cube(data): 
    with open('test.json') as file1: 
     temp_data = json.load(file1) 

    temp_data.update(data) 

    file1.close() 

    with open('test.json', 'w') as f: 
     json.dump(temp_data, f) 

     f.close() 

, чтобы запустить его просто вызовите функцию write_to_cube({"some_data" = data})

Теперь проблемы с этим кодом является то, что это быстро для небольшого количества данных, но проблема возникает, когда файл test.json имеет в нем более 800 МБ. Когда я пытаюсь обновить или добавить данные к нему, это займет много времени.

Я знаю, что есть внешние библиотеки, такие как simplejson или jsonpickle. Я не уверен, как их использовать.

Есть ли другой способ решения этой проблемы?

Update:

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

Is there a memory efficient and fast way to load big json files in python?

Reading rather large json files in Python

Ничего из вышеперечисленного решить этот вопрос дубликат. Они ничего не говорят о написании или обновлении.

+1

Возможный дубликат [is-there-a-memory-efficient-and-fast-way-to-load-big-json-files-in-python] (http://stackoverflow.com/questions/2400643/is-there-a-memory-efficient-and-fast-way-to-load-big-json-files-in-python) – BPL

+0

В основном JSON не является хорошим выбором формата, когда дело доходит до сериализация большого количества данных. –

+0

Возможный дубликат [Чтение довольно больших json-файлов в Python] (http://stackoverflow.com/questions/10382253/reading-rather-large-json-files-in-python) –

ответ

0

Таким образом, проблема в том, что у вас долгая операция. Вот несколько подходов, которые я обычно делаю:

  1. Оптимизируйте работу: Это редко работает. Я бы не рекомендовал какую-либо превосходную библиотеку, которая могла бы проанализировать json на несколько секунд быстрее.
  2. Измените свою логику. Если целью является сохранение и загрузка данных, возможно, вы захотите попробовать что-то еще, например, сохранить ваш объект в двоичном вместо этого.
  3. Темы и обратные вызовы или отложенные объекты в некоторых веб-фреймах. В случае веб-приложений иногда операция занимает больше времени, чем может ждать запрос, мы можем выполнить операцию в фоновом режиме (в некоторых случаях: файлы в zip-файлах, затем отправку почтового сообщения в электронную почту пользователя, отправка SMS, вызвав api другой сторонней стороны. ..)
Смежные вопросы