Я пытаюсь найти все объекты json в моем файле jsonl, которые содержат одно и то же значение идентификатора.
Поэтому, если мои данные выглядят так:
{
"data": {
"value": 42,
"url": "url.com",
"details": {
"timestamp": "07:32:29",
"identifier": "123ABC"
}
},
"message": "string"
}
Я хочу найти всеобъект с таким же значением идентификатора. Файл слишком велик для одновременной загрузки, поэтому вместо этого я проверяю построчно и сохраняю только значения идентификаторов. Недостатком этого является отсутствие первого объекта с таким идентификатором (т. Е. Если бы все объекты A, B и C имели одинаковый идентификатор, я бы в итоге сохранил только B и C). Чтобы найти первое вхождение идентификатора, я пытаюсь прочитать файл во второй раз, чтобы подобрать только первый раз, когда найден каждый повторяющийся идентификатор. Здесь я сталкиваюсь с некоторыми проблемами.
Эта часть работает так, как задумано:
import gzip
import json_lines
import jsonlines
from itertools import groupby
identifiers=set()
duplicates=[]
with json_lines.open('file.jsonlines.gz') as f:
for item in f:
ID = item["data"]["details"]["identifier"]
if ID in identifiers:
duplicates.append(item)
else:
identifiers.add(ID)
dup_IDs={dup["data"]["details"]["identifier"] for dup in duplicates}
Но когда я читаю файл второй раз:
with json_lines.open('file.jsonlines.gz') as f:
for item in f:
ID = item["data"]["details"]["identifier"]
if ID in dup_IDs:
duplicates.append(item)
dup_IDs.remove(ID)
else:
continue
if len(dup_IDs)==0:
break
else:
continue
Он работает в течение ~ 30 минут и в конечном итоге вылетаетмой компьютер. Я предполагаю (надеюсь), что это потому, что есть проблема с моим кодом, а не с моим компьютером, потому что код легче исправить.