{'title':'7778', 'mes':'ruseo', 'coord': '755'}
{'title':'77789', 'mes':'ruseo', 'coord': '755'}
{'mes': 'seoru', 'title' : '7778', 'coord' : '-'}
{'mes': 'seoru', 'title' : '7778', 'coord' : '-'}
import json
with open(r'C:\json3toster.json', 'r', encoding="utf-8") as fp:
ds = fp.readlines()
print(len(ds))
mem = []
for record in ds:
name = record.replace('{','').split(',')
for dat in name:
dat2 = dat.split(': ')
if dat2[0] == ' "title"':
newline = dat2[1]
if any(newline in lice for lice in mem):
pass
else:
mem.append(record)
print(len(mem))
for newjs in mem:
with open(r'd:/json_fin.json', 'a', encoding='utf-8') as fg:
fg.write(newjs)
from ast import literal_eval as eval # ast.literal_eval() безопасный, обычный eval() - нет
with open('input.txt', 'r') as fi, open('output.txt', 'w') as fo:
cache = set()
for line in fi:
title = eval(line).get('title')
if title not in cache:
cache.add(title)
fo.write(line)
from ast import literal_eval as eval
from functools import lru_cache
@lru_cache(None)
def process(title):
print(record, file=fo)
with open('input.txt', 'r') as fi, open('output.txt', 'w') as fo:
for record in map(eval, fi):
process(record['title'])
>>> process.cache_info()
CacheInfo(hits=994960, misses=5040, maxsize=None, currsize=5040)
from ast import literal_eval
title=line.split("title")[1].split("'")[2]
dct[title]=line
на одном миллионе строк оно отработало за 0:00:02.051733title = eval(line).get('title')
dct[title]=line
на одном миллионе строк отработало за 0:00:22.765918rm -Rf
же? твоё fp.readlines() с ещё большей вероятностью не влезет в память, не так ли?)
print(len(ds))
. Так что не передёргивай - мой пройдёт наверняка.b = choice(tuple(diff(a, b, c)))
здесь. Я не плачу от этого кода кровавыми слезами, но там рядом лежит решение в императивном стиле, и оно мне нравится больше ) как ваш вариант будет работать если ваш файлик неожиданно окажется в районе 100Гб?
tuple(diff...
тяжеловесна против моментально сходящихся итерацией у меня. большой файл бьётся на чанки, влезающие в память, например по 1гб, они сортируются и сохраняются в файлах.
Затем данные из этих файлов в один проход потоково сливаются с помощью heapq
мы тут на специализированом ресурсе
Не надо вкладывать в термины какой-то свой смысл
О терминах не спорят, о них договариваются
import re
with open(r'C:\json3toster.json', 'r', encoding="utf-8") as fp:
ds = fp.readlines()
d = {"'title'": 0, "'mes'": 1, "'coord'": 2}
print(len(ds))
findall, buf = re.compile(r"'[^']*'").findall, [''] * 3
for i, s in enumerate(ds):
l = findall(s)
while l:
w = l.pop()
buf[d[l.pop()]] = w
ds[i] = '\t'.join(buf)
ds.sort()
a = ''
with open(r'd:/json_fin.json', 'a', encoding='utf-8') as fg:
for s in ds:
title, mes, coord = s.split('\t')
if a != title:
a = title
fg.write(f"{{'title': {title} 'mes': {mes}, 'coord': {coord}}}\n")
cache
, в памяти. Я начал разговор как обсуждение, но зачем продолжать его, если ты в нём не заинтересован.