#python #json
#python #json
Вопрос:
Я вызываю список объектов через json в Python, и я хочу что-то сделать с каждым из них.
Как я могу убедиться, что при запуске этого скрипта во второй раз я не использую объекты, которые я уже использовал в первый раз?
Пример:
При первом запуске скрипта я получаю это:
{u'status': u'active', u'due_date': None, u'group': u'later', u'task_id': 73293}}
Поэтому я делаю все, что хочу, например, записываю это в текстовый файл.
Затем я запускаю его снова, и я получаю это: (первый все еще там, но добавлен другой.)
{u'status': u'active', u'due_date': None, u'group': u'later', u'task_id': 73293}}
{u'status': u'active', u'due_date': None, u'group': u'later', u'task_id': 73299}}
Теперь я хочу записать только 2-й в текстовый файл. О, и я хочу, чтобы он был как можно более легким.
Комментарии:
1. Определите «новое». Было бы здорово, если бы вы сделали это с помощью примера кода.
2. Вы пытаетесь проверить наличие точного дубликата?
3. @Alex, или, по крайней мере, псевдокод.
4. Я думаю, что вам нужно сохранить список уже обработанных объектов (или просто что-то, что их идентифицирует) где-нибудь (файл, база данных, …) и проверить, использовали ли вы их уже во время выполнения.
5. Если вы хотите сэкономить место, вы могли бы создать работающий хэш элементов в списке, а затем статически сохранить его. В следующий раз, просматривая список, сравните свои хэши и посмотрите, совпадают ли они.
Ответ №1:
old_list = json.loads(old_json)
new_list = json.loads(new_json)
new_items_list = list(set(new_list) - set(old_list))
Комментарии:
1. Я думаю, что понимаю, но … как мне сохранить old_json?
2. Вы можете изменить это решение для обновления
old_list
после обработки каждого нового набора — это полностью решит исходную проблему.3. @JCB_K Если вы работаете в том же процессе, просто сохраните его в переменной. Если вам нужна настойчивость — например, каждая задача обрабатывается отдельно, и они не разделяют состояние, тогда просто запишите
old_json
в файл. Помните о проблемах параллелизма, если в этот файл могут записываться более одного процесса.