Задать вопрос
  • Как сформировать вложенный json из структуры?

    trapwalker
    @trapwalker Куратор тега Python
    Набросал тут тебе.
    Смотри. Я предлагаю для начала переработать весь твой огромный получившийся файл в формат "jsons".
    Это простой текстовый файл, в котором каждое твое событие в отдельной строке в виде json.
    Кроме того в этом коде создастся еще и индексный файл.
    С помощью него и функции load_by_index можно быстро доставать из файла строку с нужным id.
    import json
    
    EOL = '\n'
    
    
    def convert_big_map2values_jsons(fn):
        with open(fn) as f:
            big_data = json.load(f)
    
        idx = {}
        p = 0
    
        with open(fn + 's', 'w') as f:
            for k, v in big_data.items():
                idx[k] = p
                line = json.dumps(v)
                writed_size = f.write(line + EOL)
                p += writed_size
    
        with open(fn + '.index.json', 'w') as f:
            json.dump(idx, f)
    
    
    def load_by_index(index, filename: str):
        with open(filename + '.index.json', 'r') as f:
            idx = json.load(f)
    
        offset = idx[str(index)]
        with open(filename + 's', 'r') as f:
            f.seek(offset)
            return json.loads(f.readline())
    
    
    if __name__ == '__main__':
        fn = 'big_fucking_file.json'
        fn = 'tmp/1.json'
        convert_big_map2values_jsons(fn)
        print('Loaded by index:', load_by_index(256, fn))

    На конвертацию понадобится, конечно, 27 гигов оперативы. Раз уж они у тебя есть, я не стал делать для тебя SAX конвертер. Хотя можно бьло.

    А потом по индексу можно дёргать мгновенно и просто взять строки с 10 по 120 и визуализируй -- не хочу=)
  • Как сформировать вложенный json из структуры?

    trapwalker
    @trapwalker Куратор тега Python
    Сергей Паньков, Но не спешите удалять ваш JSON!
    Сейчас что-нибудь придумаем.
    У вас есть какие-нибудь оценки?
    • количества событий,
    • среднего и максимального количества треков в одном событии,
    • среднего и максимального количество точек в треке.

    Достаточно очень приблизительных прикидок.
  • Как сформировать вложенный json из структуры?

    trapwalker
    @trapwalker Куратор тега Python
    Дмитрий Быстров, проблема в том, что вы теперь хотите прочитать сравнительно небольшой кусочек JSON-файла размером 27Gb. Это действительно проблема, поскольку, как я писал выше, JSON совершенно не предназначен для представления ТАКОГО огромного количества данных в одной структуре.
    Если читать то, что вам требуется, обычным способом, то вы вынуждены будете ради одного трека загрузить ВЕСЬ файл. Все 27 Гигов. Вы как-то умудрились его собрать и сохранить, а значит оперативки вам хватит (наверно своп помог), однако даже одно чтение будет занимать чудовищное время.

    Когда я писал вам это решение я не знал ещё, что треки и координаты там не отсортированы и вразброс. Если бы элементы были хотя бы отсортированы и имели четкий признак конца последовательности, то можно было бы обойтись малой кровью и писать jsons по мере конвертации.
    В вашем же случае всё это будет просто ужасно медленно работать.

    Есть, правда, один способ читать исполинские JSON-файлы по порядку без загрузки в память полностью. Это так называемые SAX-парсеры. Идея их в том, что они читают файл по кусочком маленьким буффером и меняют своё внутреннее состояние в зависимости от считываемых символов. Такой парсер держит контекст и реагирует на скобки и лексемы. Добавив свои обработчики событий можно добиться накопления считываемых данных в контексте и по каждому факту закрытия скобки нужного уровня выдавать кусочек данных.

    Этот подход годится для последовательного сканирования файла, для конвертации в более удобоваримый формат, но не для произвольного доступа по идентификатору.
  • Как сформировать вложенный json из структуры?

    trapwalker
    @trapwalker Куратор тега Python
    Кстати, попробуйте модуль shelve. Это такой персистентный словарь в файловой системе.
    По памяти получится дешевле.
    .
  • Как сформировать вложенный json из структуры?

    trapwalker
    @trapwalker Куратор тега Python
    Дмитрий Быстров, ну да, тут гисы ни при чем. Да и никакого пространственного индекса не надо тут.
    Беру свои слова обратно. Но в БД, мне кажется, всё равно удобнее с этим работать.
  • Как сформировать вложенный json из структуры?

    trapwalker
    @trapwalker Куратор тега Python
    Вот я же о чем. Postgis решит миллион проблем. А ещё можно QGIS подключить и визуализация готова.
  • Как сформировать вложенный json из структуры?

    trapwalker
    @trapwalker Куратор тега Python
    Дмитрий Быстров,
    Если изменить bytes на buffer, то код работает без ошибок.

    Так и есть. Переименовал не везде. Вы исправили верно.
    Мне необходимо будет сделать визуализацию треков по координатам для каждого эвента.

    В этом случае и при таких размерах вам не подходит единый монолитный JSON и вообще json плохо подходит.
    Если бы передо мной стояла такая задача, то я бы использовал БД postgres с расширением postgis.
    Загрузил бы все данные туда как есть, а потом сджойнил и сгруппировал бы прямо в ней.
    postgis даст возможность фильтровать выборку по границам, считать геометрические длины треков, формировать огибающие буферы, агрегировать, вообще что угодно делать.
    Даже сопоставлять и находить похожие или совпадающее с точностью до произвольной погрешности.
    Кроме того любая ГИС позволит отобразить данные прямо как они есть и прямо из базы без лишних преобразований. И произвольные запросы тоже отобразит.
    А ещё можно сджойнить треки с какими-то дополнительными данными и отображать их тоже на карте. С использованием, скажем QGIS вы смогли бы раскрасить треки в соответствии с какими-то приджойненными метаданными. Можно кроме прочего нанести какие-то зоны и радиусы на карту.

    Короче, для визуализации самое то. Можно даже тайл-рендерер настроить и отдавать тайлы с треками почти в реальном времени. А можно отдавать не растровые тайлы, а векторные и в лифлете очень экономично и быстро смотреть свои данные.
  • Как ограничить диапазон двузначных чисел в нетривиальном регулярном выражении?

    trapwalker
    @trapwalker
    У вас получается, что как минимум два интервала должно быть через запятую А по условию один или больше.
    Не сработает же на "1-16".
  • Как ограничить диапазон двузначных чисел в нетривиальном регулярном выражении?

    trapwalker
    @trapwalker
    Thehavoc, я дополнил ответ и привёл полное регулярное выражение для вашего случая.
  • Ошибка кодировки при импорте csv в postgresql?

    trapwalker
    @trapwalker
    Ну да, зачем нам смотреть ваш svg. Там, конечно, же всё нормально. Это я как латентный экстрасенс вам говорю. ага
  • Как сделать распознавание цифр на изображении?

    trapwalker
    @trapwalker Куратор тега Python
    profesor08, ардуина, сервомоторы и сосиска вместо пальца решат проблему.
  • Как очистить переменую от букв чтобы потом привратить в число?

    trapwalker
    @trapwalker Куратор тега Python
    Судя по тому, что
    привратить
    , там всё же речь о числе, а не цифре. Просто... ну вот так вот. Молодое поколение погромистов.
  • Как сделать распознавание цифр на изображении?

    trapwalker
    @trapwalker Куратор тега Python
    Антон, 6 это в общих чертах. Я могу глубже декомпозировать, но это отдельный прайс.
  • Почему не проходит валидацие через regex?

    trapwalker
    @trapwalker
    Jekson, берите первый вариант или уберите вопросы во втором
  • Как сделать игру типа wofenshtein 3D?

    trapwalker
    @trapwalker
    Afafks123132132165, хрень какая-то. i откуда-то взялось. Проблема не в математике, а в адском беспорядке в голове.
  • Как сделать распознавание цифр на изображении?

    trapwalker
    @trapwalker Куратор тега Python
    Но аппаратное решение с телефоном на штативе выглядело бы эпично, согласитесь=)
  • Как сделать распознавание цифр на изображении?

    trapwalker
    @trapwalker Куратор тега Python
    minepoc, Без вознаграждения я готов только поотвечать вам на вопросы=) К сожалению времени меньше, чем альтруизма.
    Если все капчи очень похожи на то, что вы прислали, то я могу за недельку неспеша сделать. Срочноое решение выйдет в разы дороже. Но вы можете поискать фрилансеров подешевле. 5к рублей и для этой капчи у вас будет решение. И даже поддержка по фиксу багов и каких-то небольших хотелок
  • Как правильно составить Sql запрос для получения данных из двух таблиц?

    trapwalker
    @trapwalker
    Rsa97, Да что там пробовать. Человеку задачу решить надо, а не вот это вот всё, пробовать, там...
  • Как сделать игру типа wofenshtein 3D?

    trapwalker
    @trapwalker
    Saboteur, жалкая кучка времени по сравнению с месяцами раздумий о том как крутить лучом без синусов. Я думал это какой-нибудь талантливый школьник из деревни, которого чуть подтолкнуть и попрёт.
  • Как сделать игру типа wofenshtein 3D?

    trapwalker
    @trapwalker
    Определить точки пересечения прямой и квадрата ещё проще.
    Квадрат -- это четыре отрезка. Если он у вас ещё и ортогонален (его стороны параллельны осям координат), то он задаётся четырьмя числами:
    X1, Y1, X2, Y2
    Фактически это 4 отрезка:
    1. (X1, Y1)-(X1, Y2)
    2. (X1, Y2)-(X2, Y2)
    3. (X2, Y2)-(X2, Y1)
    4. (X2, Y1)-(X1, Y1)

    Просто подставляй их в уравнение прямой:
    (x-Xa)/(Xb-Xa)=(y-Ya)/(Yb-Ya)
    и получишь координаты точек пересечения:
    • (X1-Xa)/(Xb-Xa)=(y-Ya)/(Yb-Ya) = (X1, y)
    • (X2-Xa)/(Xb-Xa)=(y-Ya)/(Yb-Ya) = (X2, y)
    • (x-Xa)/(Xb-Xa)=(Y1-Ya)/(Yb-Ya) = (x, Y1)
    • (x-Xa)/(Xb-Xa)=(Y2-Ya)/(Yb-Ya) = (x, Y2)

    Их нужно проверить на условия:
    Y1<y<Y2
    X1<x<X2
    Те, что им удовлетворяют -- пересекают стороны квадрата.
    Из этих точек находим ближайшую к (Xa, Ya). Она и будет точкой, куда упёрся ваш "луч". А если такой не нашлось, значит не упёрся.

    С большой буквы во всех этих уравнениях известные величины. А с маленькой неизвестные.