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

    deepblack
    @deepblack Куратор тега Python
    Например так:

    Python 3.12.4 (main, Jun  6 2024, 18:26:44) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> initial_data = {
    ...     "coords": [[673, 103], [673, 104], [673, 105], [673, 104]]
    ... }
    >>>
    >>> transformed_data = {
    ...     "coords": [{"x": coord[0], "y": coord[1]} for coord in initial_data["coords"]]
    ... }
    >>> transformed_data
    {'coords': [{'x': 673, 'y': 103}, {'x': 673, 'y': 104}, {'x': 673, 'y': 105}, {'x': 673, 'y': 104}]}
    >>>
    Ответ написан
    4 комментария
  • Ошибка UNAUTHORIZED при работе с Yandex SpeechKit API: Как правильно передать API-ключ?

    deepblack
    @deepblack Куратор тега Python
    Что-то странно ваш код выглядит,
    в документации есть пример:
    export FOLDER_ID=<folder_ID>
    export IAM_TOKEN=<IAM_token>
    curl -X POST \
       -H "Authorization: Bearer ${IAM_TOKEN}" \
       --data-binary "@speech.ogg" \
       "https://stt.api.cloud.yandex.net/speech/v1/stt:recognize?folderId=${FOLDER_ID}&lang=ru-RU"
    Ответ написан
    Комментировать
  • Что нужно писать в строке "Объект"?

    deepblack
    @deepblack Куратор тега Python
    Что нужно писать в строке «Объект»?

    Собственно ключ объекта в s3 бакете в котором записана твоя функция.

    У тебя тело функции (исходник) в S3 хранится, верно?
    Т.е. ты его предварительно залил в s3 Яндекс.Клауда, через aws-cli или yc-cli?
    Может просто в редакторе кода (на твоем скрине слева от Object Storage) все напишешь и не будешь переусложнять?
    Ответ написан
    Комментировать
  • Как правильно запустить код?

    deepblack
    @deepblack Куратор тега Python
    Документация:
    Updater
    The sole purpose of this class now is to fetch updates from Telegram. It now only accepts the arguments bot and update_queue and only has those attributes.


    Отсюда выводы:
    • переписывай бота согласно изменениям в актуальной версии библиотеки или
    • делай downgrade этой самой библиотеки;
    Ответ написан
    Комментировать
  • Как узнать и зафиксировать время, когда пользователь нажал inline-кнопку?

    deepblack
    @deepblack Куратор тега Python
    Использовать time.time() не хочется, чтобы избежать конфликта с Телеграм при неправильно установленном времени на локальной машине пользователя.


    Когда это time.time() стало отдавать время на локальной машине пользователя?
    Это время на сервере, на котором выполняется Python код (т.е. там где запущен твой бот).
    Ответ написан
    2 комментария
  • Как решить проблему с скачиванием pyqt5-tools?

    deepblack
    @deepblack Куратор тега Python
    Под python3.9 отлично заводится на Ubuntu

    (base) ➜  tmp mkdir qna-tmp
    (base) ➜  tmp cd qna-tmp 
    (base) ➜  qna-tmp python3.9 -m venv venv
    (base) ➜  qna-tmp source ./venv/bin/activate
    (venv) (base) ➜  qna-tmp python --version
    Python 3.9.12
    (venv) (base) ➜  qna-tmp pip install pyqt5-tools


    Скриншот
    6386f555bcb78333900093.png


    Поробуй Python3.9 т.к. в PyPi у пакета указаны следующие версии

    Programming Language
    Python :: 3
    Python :: 3.5
    Python :: 3.6
    Python :: 3.7
    Python :: 3.8
    Python :: 3.9


    Python 3.10 support? #98
    Ответ написан
  • Столкнулся с такой проблемой, AttributeError: 'str' object has no attribute 'users'/Что делать?

    deepblack
    @deepblack Куратор тега Python
    облазил весь интернет прочитал всю документацию.

    спасибо, орнул в голосину ))
    Надо было всего лишь учебник по Python осилить.

    password - у тебя в данном случае объект с типом str
    естественно в данном случае у него не может быть атрибута users

    UPD:

    Вот у тебя есть объект password.users
    после этого ты присваиваешь password значение из input,
    которое по умолчанию имеет тип str.
    Затем ты пытаешься сравнить то что уже перезаписал и естественно получаешь ошибку.

    Переименуй password в допустим password_user_input в строке password = input("Введите свой пароль:\n")
    Далее уже сравнивай if password_user_input == password.users [log]:
    Ответ написан
    3 комментария
  • Файл базы данных в папку?

    deepblack
    @deepblack Куратор тега Python
    Должно быть примерно так:
    manager = Manager('aiosqlite:///data/db.sqlite')

    а не то что ты написал:
    manager = Manager('data/aiosqlite:///:database.sqlite3:')
    Ответ написан
    Комментировать
  • Почему не устанавливаются все функции cv2?

    deepblack
    @deepblack Куратор тега Python
    Ты запускать то пробовал после этого?

    Если не работает, попробуй так:
    import cv2.cv2 as cv2
    или так:
    from cv2 import cv2
    Ответ написан
  • Как изменить запись в СУБД через цикл while?

    deepblack
    @deepblack Куратор тега Python
    Зачем тебе тут While?

    Достаточно простого sql UPDATE по условию.
    Для примера как это должно выглядеть:
    UPDATE product SET price = price + 50 WHERE id = 1;
    Ответ написан
  • Как сделать так, чтобы после нажатия на кнопку должен отправляться файл (библиотека Telebot)?

    deepblack
    @deepblack Куратор тега Python
    • Подобный вопрос тут неоднократно задавался
    • Возьми учебник по Python и изучай его много и внимательно, параллельно с написанием ботов
    • Смотри в документацию Telegram и той библиотеки что ты используешь

    Ответ написан
    Комментировать
  • Kак сформулировать исключение (except)?

    deepblack
    @deepblack Куратор тега Python
    Сделай:

    from pyowm.commons.exceptions import NotFoundError

    Дальше лови его как обычно:
    try:
        ...
    
    except NotFoundError:
        ...
    Ответ написан
    1 комментарий
  • Почему вылазит ошибка TeleBot Python?

    deepblack
    @deepblack Куратор тега Python
    Там же понятно написано:

    can't parse inline keyboard button: Text buttons are unallowed in the inline keyboard


    В репозитории есть пример реализации

    Не работают Inline-кнопки, в чем причина?

    Код где?

    UPD: ok, код есть, смотрим документацию Telegram InlineKeyboardButton
    Там довольно понятно написано:

    This object represents one button of an inline keyboard. You must use exactly one of the optional fields.


    Теперь сравни это с тем что ты написал в коде, если непонятно посмотри в примере библиотеки (ссылку на который я дал выше)
    Ответ написан
  • Как создать красивые inline кнопки для питона (telegram, aiogram)?

    deepblack
    @deepblack Куратор тега Python
    почему у тебя во втором варианте указано
    row_width=1
    Ответ написан
    1 комментарий
  • Как запустить скрипт в фоне?

    deepblack
    @deepblack Куратор тега Python
    Напиши юнит для Systemd (если он есть в системе)

    [Unit]
    Description=Python Demo Service
    
    [Service]
    # Command to execute when the service is started
    ExecStart=/usr/bin/python3 path/to/your/python_demo_service.py


    так-же можно вместо системного питона указать путь к нему в виртуальном окружении.

    Вот-тут и тут довольно понятно расписано как это сделать, остальное несложно нагуглить.

    Upd: Для винды
    Используй виндовый Task Scheduler (так-же известный как "Планировщик заданий" и taskschd.msc)

    https://stackoverflow.com/a/44727480/2981702
    Ответ написан
  • Python Ошибка Traceback (most recent call last): Как исправить?

    deepblack
    @deepblack Куратор тега Python
    Python Ошибка Traceback (most recent call last)

    Ошибка IndexError: list index out of range

    В строке:
    for url in range(int(pages_count[0])):

    Но сервер отдает 503, видимо тебя забанили немножко

    Как исправить?

    Разобраться с причиной блокировки.
    Ответ написан
    Комментировать
  • Ошибка с перенаправлением: как скачать файл с веб.страницы в формате pdf?

    deepblack
    @deepblack Куратор тега Python
    Дело в том что на этом сайте есть защита от ботов.
    И скачивается не пустой файл как html, а довольно интересный код на JS (внутри этого html файла):

    Посмотреть содержимое

    var utm_set = null;
    
    function setup_utm() {
        if (utm_set == null) return null;
        var i = 0;
        var p = document.createElement("a");
        p.href = document.referrer;
        for (i = 0; i < utm_set.length; i++) {
            if (p.hostname === utm_set[i]["host"] || p.hostname.indexOf(utm_set[i]["host"] + '.') === 0 || p.hostname.indexOf('www.' + utm_set[i]["host"] + '.') === 0) {
                return utm_set[i]["args"];
            }
        }
        return null;
    }
    
    function fixedEncodeURIComponent(str) {
        return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
            return "%" + c.charCodeAt(0).toString(16);
        });
    }
    
    function get_jhash(b) {
        var x = 123456789;
        var i = 0;
        var k = 0;
        for (i = 0; i < 1677696; i++) {
            x = ((x + b) ^ (x + (x % 3) + (x % 17) + b) ^ i) % 16776960;
            if (x % 117 === 0) {
                k = (k + 1) % 1111;
            }
        }
        return k;
    }
    
    
    function get_param(store, type, id) {
        var o = document.cookie.split(';');
        var p = undefined;
        for (var i = 0; i < o.length; i++) {
            if (o[i].indexOf(store) !== -1) {
                var a = o[i].split('=');
                if (a.length > 1) {
                    var q = a[1].split(',');
                    if (q.length > id) {
                        p = q[id];
                    }
                }
            }
        }
        if (p === undefined) {
            if (type === "int") {
                return 0;
            }
            if (type === "str") {
                return "";
            }
        }
        if (type === "int") {
            return parseInt(p);
        }
        return p + "";
    }
    
    function get_utm_medium() {
        var mediums = {
            "organic": ["yandex", "google", "bing", "search.yahoo", "yahoo"],
            "referral": null
        };
    
        var m, a, v, f = 0;
        var p = document.createElement("a");
        p.href = document.referrer;
        for (m in mediums) {
            a = mediums[m];
            if (a == null) {
                break;
            }
            f = 0;
            for (var i = 0; i < a.length; i++) {
                v = a[i];
                if (p.hostname.indexOf(v + '.') === 0 || p.hostname.indexOf('www.' + v + '.') === 0) {
                    f = 1;
                    break;
                }
            }
            if (f === 1) {
                break;
            }
        }
        return m;
    
    }
    
    function mini_hostname(hostname, medium) {
        if (hostname === undefined || hostname === "") {
            return hostname;
        }
        hostname = hostname.replace("www.", "");
        if (medium === "organic") {
            if (get_param("__js_p_", "int", 3) === 1) {
                hostname = hostname.split(".")[0];
            }
        }
        return hostname;
    }
    
    function construct_utm_uri(disable_utm) {
    
        var p = document.createElement("a");
        p.href = document.referrer;
        if (p.href === "") {
            return window.location.href;
        }
    
        var ref = p.hostname.replace("www.", "");
    
        var loc = window.location.hostname.replace("www.", "");
        if (loc === ref) {
            return window.location.href;
        }
        if (disable_utm === 1) {
            return window.location.href;
        }
        if (window.location.href.indexOf("utm_") !== -1 || window.location.href.indexOf("gclid=") !== -1 || window.location.href.indexOf("yclid=") !== -1) {
            return window.location.href;
        }
        var uri = window.location.href;
        if (uri.indexOf("?") !== -1) {
            uri += "&";
        } else {
            uri += "?";
        }
        var medium = get_utm_medium();
        var hostname = mini_hostname(p.hostname, medium);
        var args = setup_utm();
        if (args != null) {
            uri += args;
        } else {
            uri += "utm_source=" + hostname + "&utm_medium=" + medium + "&utm_campaign=" + hostname + "&utm_referrer=" + hostname;
        }
        return uri;
    }
    
    setTimeout(function() {
        var code = get_param("__js_p_", "int", 0);
        var age = get_param("__js_p_", "int", 1);
        var sec = get_param("__js_p_", "int", 2);
        var disable_utm = get_param("__js_p_", "int", 4);
        var jhash = get_jhash(code);
        document.cookie = "__jhash_=" + jhash + ";max-age=" + age + "; " + (sec ? "SameSite=None;Secure;" : "") + " Path=/";
        document.cookie = "__jua_=" + fixedEncodeURIComponent(navigator.userAgent) + ";max-age=" + age + "; " + (sec ? "SameSite=None;Secure;" : "") + " Path=/";
        window.location.href = construct_utm_uri(disable_utm);
        if (window.location.hash) {
            window.location.reload();
        }
    }, 1000);



    Коротко и с некоторыми неточностями:
    1. Браузер делает запрос, получает куку и тот самый html c js кодом внутри
    2. Код производит некоторые вычисления, ставит еще некоторые куки, после этого происходит повторный запрос к серверу
    3. На сервере куки валидируются и отдается либо нормальное содержимое либо тот самый html файл снова


    Скрины со вкладки Cookies консоли разработчика
    636b53c330230551365215.png
    636b53e570e62600722645.png



    Тут несколько вариантов решения:
    1. Сходить на сайт через браузер, скопировать куки, подставить их в запрос requests (естественно куки протухнут и надо будет повторять операцию)
    2. Разобрать как работает скрипт и эмулировать его работу на Python
    3. Взять что-то наподобие Selenium webdriver и решить задачу с помощью него
    Ответ написан
    2 комментария
  • Бот на Telebot падает, когда отправляешь второй одинаковый запрос в БД sqllite. Как исправить?

    deepblack
    @deepblack Куратор тега Python
    func(message) -> db_table_val(...) -> cursor.execute(INSERT INTO User...)

    При каждом нажатии " Посмотреть меню" в Telegram ты пытаешься добавить пользователя в БД,
    сделай перед вставкой проверку, существует пользователь или нет.

    Беглое гугление: python sqlite check if row exists
    Первый попавшийся ответ:
    https://stackoverflow.com/a/2440179/2981702

    Дальше думаю сообразишь )
    Ответ написан
    Комментировать
  • Как выводить только ссылку на свой профиль Django?

    deepblack
    @deepblack Куратор тега Python
    <a href="{% url 'profile' slug=user.userprofile.slug %}">Профиль {{ user.username }}</a>


    user.userprofile.slug
    Ответ написан
    2 комментария
  • Как удалить пайтон 3.8.10 с WSL?

    deepblack
    @deepblack Куратор тега Python
    Удалять дефолтный python не нужно. Если конечно не хочется развлечений ))

    Посмотри в репозиториях apt для твоего дистрибутива - если там есть необходимая версия то ставить оттуда.
    Если нет - собрать из исходников, это довольно легко.
    Ответ написан
    4 комментария