Ответы пользователя по тегу Python
  • Как сжать массив координат?

    @bubaley Автор вопроса
    В итоге использовал следующий шаги для сжатия координат. Сразу о результатах до этих действий:
    Было:
    10 секунд загрузки
    7.5 мб данных
    Стало:
    2 секунды загрузки
    540 кб

    Пример:
    python
    1. Shapely.simplify() для сглаживания координат (показатель подбирал для себя)
    2. Дельта кодирования, для уменьшения объема данных
    polygon = Polygon(coords).simplify(0.00015)
        coords = list(polygon.exterior.coords)
        lng_list = list()
        last_lng = None
        lat_list = list()
        last_lat = None
        for val in coords:
            if not last_lng:
                lng_list.append(val[0])
                lat_list.append(val[1])
            else:
                lng_list.append(round(val[0] - last_lng, 6))
                lat_list.append(round(val[1] - last_lat, 6))
            last_lng = val[0]
            last_lat = val[1]
        return {
            'lat': lat_list,
            'lng': lng_list
        }

    3. Компрессия данных:
    Делается в одну строку
    b64encode(zlib.compress(json.dumps(data).encode('utf-8')))

    JavaScript
    4. Приведение к объекту JS из сжатой строки
    let newData = atob(data)
        newData = newData.split('').map(function (e) {
            return e.charCodeAt(0)
        })
        newData = new Uint8Array(newData)
        newData = pako.inflate(newData)
        newData = new TextDecoder().decode(newData)
        return JSON.parse(newData)

    5. Преобразование к нормальному виду координат из дельта-закодированных данных
    let lastLat = null
        let lastLng = null
        let result = []
                coords.forEach(val => {
                let newCoords = []
                for (const [index, el] of val.lat.entries()) {
                    if (!index) {
                        lastLat = val.lat[0]
                        lastLng = val.lng[0]
                    } else {
                        lastLng += val.lng[index]
                        lastLat += val.lat[index]
                    }
                    newCoords.push([lastLng, lastLat])
                }
                result.push(newCoords)
            })
    Ответ написан
    Комментировать
  • Почему выдает ошибку 400 requests python (api)?

    @bubaley
    Преобразуйте сначала params в строку json
    result = requests.post("127.0.0.1:9000/attack/start", data=json.dumps(params))
    print (result.json)
    Ответ написан
    Комментировать
  • Какая БД лучше всех для Python?

    @bubaley
    Здравствуйте, если разработка идёт на локальной машине до достаточно будет sqlite3. Чтобы не заморачиваться с поднятием у себя на машине нормальных баз данных. Ее удобно бэкапить, переносить и не нуждается в настройке.
    Если переносите все в прод., То лучше использовать postgresql. Хотя бы потому что она opensource. И рабоатет быстрее того же mysql. Хотя в последних версиях разница совсем незначительная. Зато уронить ее сложнее.
    https://m.habr.com/ru/post/348220
    Вот статья в который расписаны все + и -.
    Конечно есть проекты где лучше использовать nosql, например mongodb.
    Но думаю, Вы все поймёте после прочтения статьи.
    Ответ написан
    1 комментарий
  • Книги, в которых примеры реальных программ(на python и другом яп)?

    @bubaley
    1. «Python. Карманный справочник», Марк Лутц
    2. «Изучаем Python», Марк Лутц
    3. «Автостопом по Python», Рейтц Кеннет
    Хорошая серия книг, которая не только покажет good practice по работе с python. Все с примерами, маленьких, но все же программ.
    Какая-то из них, прям для начинающих, там синтаксис, остальное более менее подходящее.
    Ответ написан
    Комментировать
  • Какие есть способы реализации цепочки действий в клиент-серверном приложении в Python?

    @bubaley
    Самое просто воспользоваться каким либо framework.
    Например django. Если его функционала слишком много, тогда на сервере можно поднять скрипт с flask где описать пару запросов, принимающие данные с фронта через api и возвращающие результат.
    А на фронте достаточно будет html с js в который подключен axios и jQuery.
    Но я бы воспользоваться vue для динамики.
    Ответ написан
    Комментировать
  • Как сравнить значения с базы данных?

    @bubaley
    В result тебе попадают массив объектов с одним полем. Сначала нужно получить массив id. Это для проверки на вхождение.
    В твоём случае лучше добавить в запрос where telegram_user_id = message.from.user_id.
    И проверять если количество результатов в выборке больше или равен 1,тогда он зарегистрирован.
    Ответ написан
    1 комментарий