Ответы пользователя по тегу Python
  • Какова верная реализация множественного выбора в SQLite через LIKE и REGEXP (Python)?

    Vindicar
    @Vindicar
    RTFM!
    заглавные буквы идут в кодовых таблицах подряд. По идее, будет достаточно что-то типа:
    WHERE substr(word, 1, 1) BETWEEN 'A' AND 'Z'
    если таблица word меняется нечасто, добавь в неё отдельный столбец, содержащий первую букву, и сделай индекс по нему. Может значительно ускорить дело.
    Ответ написан
    1 комментарий
  • Как получить сообщение, на которое ответил пользователь?

    Vindicar
    @Vindicar
    RTFM!
    А зачем ты делаешь get_message(), если message.reply_to_message уже должен содержать информацию о сообщении, на которое был сделан ответ?
    Ответ написан
  • Как записать в переменную упоминание пользователя(в Python)?

    Vindicar
    @Vindicar
    RTFM!
    Упоминание где, блин?

    Если в параметрах команды, то достаточно поставить типом параметра discord.Member.
    Ответ написан
  • Как сложить воедино все символы кроме первого после переделки в list?

    Vindicar
    @Vindicar
    RTFM!
    Ботописатель... я тебе секрет скажу.
    prefix = "!"
    s = "!ping"
    if s.startswith(prefix):
        command = s[len(prefix):]  # срезы в питоне? не, не слышал
        print('Команда', command)
    else:
        print('Это не команда')

    Секрет
    Сначала выучи основы языка, потом разберись как работают сетевые приложения, и только потом пиши ботов. Иначе так и будешь глупости писать.
    Ответ написан
    1 комментарий
  • Можно ли импортировать файл с помощью пути(как например data/config.py) и использовать его как файл через обычный импорт?

    Vindicar
    @Vindicar
    RTFM!
    Теоретически да, например, поигравшись со списком каталогов импорта. Но нахрена?
    Мне нужно именно через путь обязательно

    Я навскидку не назову ни одного случая, когда бы требовалось именно такое. Если у тебя импортируемый файл в подкаталоге относительно выполняемого, его можно прекрасно заимпортить. Например, из main.py у тебя должен нормально отработать import data.config as config безо всяких дополнительных манипуляций.
    Ответ написан
  • Python: как закрыть вкладку в браузере?

    Vindicar
    @Vindicar
    RTFM!
    Встречный вопрос, ответ на который ты не дал: о каком браузере речь?
    Если ты решаешь задачу автоматизации действий на сайте, то да, селениум в помощь. Сам открыл сайт, сам прокликал по нужным местам, сам закрыл.
    Если это запущенный сторонний браузер под контролем пользователя, то ситуация многократно усложняется. По идее, можно закрыть текущую вкладку, отправив в окно браузера нажатие клавиш Ctrl-W. Но это может быть перехвачено, и в целом работа не гарантируется. Перечисление вкладок - вообще та ещё задача, к которой не факт что просто подойти.

    Так что по настоящему важный вопрос звучит так: зачем тебе это? Что ты пытаешься сделать?
    Ответ написан
  • Код не работает до опр. момента, что делать?

    Vindicar
    @Vindicar
    RTFM!
    1. Осознать, что и тот, и другой код полностью занимает поток, в котором он запущен.
    2. Почитать, как работать с многопоточностью - особенно то, что касается работы с одним объектом из нескольких потоков (мьютексы, очереди и т.п.)
    3. Запустить трекер в отдельном потоке, затем запустить GUI в главном потоке.

    Альтенативно - переписать трекер, чтобы вместо while True: ... time.sleep() там был метод, который надо периодически вызывать, и вызывать его используя метод after() в ткинтере. Тогда всё будет работать в одном потоке.
    Ответ написан
    Комментировать
  • Почему через psycopg2 не могу получить список таблиц в postgres?

    Vindicar
    @Vindicar
    RTFM!
    Ну всё правильно. Запрос выполнен, но ты не получаешь строки ответа. Ты же не ожидаешь, что либа для БД будет сама по себе спамить строки в консоль при каждом запросе? =)
    with conn:
        with conn.cursor() as cursor:
            for row in cursor.execute(sql):
                print(row)
    Ответ написан
  • Почему Python не видит файлы в Linux как в Windows?

    Vindicar
    @Vindicar
    RTFM!
    Если файл лежит в папке со скриптом - надо открывать его, используя путь к пкапке со скриптом, а не надеяться на то, что текущий каталог совпадёт. Под виндой тоже всё зависит от способа запуска скрипта.
    Так что читай про sys.argv[0] и модуль pathlib. Пригодится.
    Ответ написан
    2 комментария
  • Ошибка /usr/local/lib/python3.11/dist-packages/telebot/util.py:92: RuntimeWarning: coroutine 'gpt' was never awaited tas telebot python, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Что за "as" в as def gpt(message, **kwargs):?
    Ты имел ввиду async? Так у тебя программа синхронная, в ней async не к месту. Просто def достаточно.
    Ответ написан
    4 комментария
  • Как выделить элемент не останавливая воспроизведение видео (OPENCV)?

    Vindicar
    @Vindicar
    RTFM!
    Ну а как ты себе представляешь быстрое задание И позиции И примерного размера объекта?
    А оно должно быть быстрым, так как объект может двигаться по кадру.

    Ты можешь притормаживать видео, пока пользователь держит зажатой левую клавишу мыши.
    Тогда у тебя будет реакция на нажатие левой клавиши (останавливаем видео, фиксируем одну вершину прямоугольника, содержащего объект) и на отпускание левой клавиши (фиксируем противоположную вершину, извлекаем область, содержащую объект, начинаем его отслеживать и продолжаем видео).
    Ответ написан
    Комментировать
  • Как запустить функцию вместе с ботом aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, переводим слово "warning". Это не ошибка, это предупреждение.
    Во-вторых, погуглить не пробовал?
    В ранних версиях asyncio get_event_loop() создавал рабочий цикл asyncio, если он ещё не был создан, и возвращал существующий, если он был. Потом от этого поведения решили отказаться. Пока что оно ещё работает, но потом сломается.
    Так что в начале программы используй new_event_loop(), а если нужно получить ссылку на цикл в корутине - get_running_loop()

    И я удивлюсь, если окажется, что ошибка именно в этом. У тебя где-то ещё должен быть косяк. Скорее всего одна из запускаемых корутин выполняет длительную операцию синхронно.
    Ответ написан
  • Почему не работает обработчик ответа пользователя в Телеграмм боте?

    Vindicar
    @Vindicar
    RTFM!
    А чего тут выстраивать.
    Приходит событие.
    Бот перебирает обработчики этого события.
    Для каждого обработчика вызывается func, пока она не вернёт True.
    Этот обработчик и вызывается для обработки события.
    Вот и всё.

    Единственный вопрос - порядок перебора обработчиков. Варианта реально два: либо в хронологическом порядке регистрации, либо в обратном хронологическом (что менее вероятно).
    Ответ написан
    Комментировать
  • Как сделать так чтобы пока пользователь не ввёл число в телеграмм бот он не продолжал программу а запрашивал число?

    Vindicar
    @Vindicar
    RTFM!
    Регистрировать эту же функцию process_num10_step через register_next_step_handler() в случае ошибки.
    Ответ написан
    Комментировать
  • Как заставить процесс запустить определённую процедуру?

    Vindicar
    @Vindicar
    RTFM!
    Если на пальцах:
    1. В питоне всё - оператор. Вот вообще всё, кроме комментариев. Объявление функции - такой же оператор, как и цикл.
    2. Как следствие, нет формального понятия "тело программы". Ты должен сам указать, что является телом, завернув его в if __name__ == '__main__:
    3. Чтобы выполнить подпрограмму, дочерний процесс должен выполнить код, который её определит. А единственный способ это сделать - выполнять файл с самого начала.
    4. Если ты не указал тело программы - дочерний процесс выполнит всё, в том числе запуск дочернего процесса. Что обычно не требуется.
    Так что правильно выглядящая программа с мультипроцессингом должна иметь только такой вид:
    def func1():
        ...
    
    def func2():
        ...
    
    ...
    if __name__ == '__main__':
        ... # тут запуск дочерних процессов


    А ещё данные передаются между процессами с помощью модуля pickle, так что твои распаралленные функции могут принимать и возвращать только такие объекты, которые можно упаковать с помощью pickle.
    Ответ написан
  • Можно ли сделать бота в телеграм, чтобы он уведомлял при появлении новых оценок на образовательной платформе edu.gounn?

    Vindicar
    @Vindicar
    RTFM!
    Декомпозируй задачу на подзадачи.
    1. Как получить сведения о новых оценках? Если нет никакого API уведомления (скажем, на почту), то остаётся только вариант "периодически опрашивать и сравнивать с прошлым результатом".
    Тут нужно пошариться по странице и понять, как она получает значения об оценках. Если эти значения вписаны уже в код HTML страницы - в помощь связка requests (ну или aiohttp) для скачивания страницы и bs4 для её разбора. Если эти значения подгружаются динамически через JS - это удобнее, можно выяснить, какой запрос подгружает сведения об оценках, и делать этот запрос самому. Инструменты разработчика в браузере помогут.

    2. Как отправить сведения об оценках?
    Если нет задачи управлять ботом через ТГ, а нужны исключительно оповещения на заранее заданный контакт, то необязательно делать полноценного бота - можно просто отправить запрос на сервер ТГ для отправки сообщения. Как - гуглится. Тогда у тебя основным скриптом будет парсер оценок, который будет дёргать функцию отправки уведомления.
    Если есть задача, чтобы бот хранил историю оценок, отвечал на запросы и т.д. - то нужен полноценный бот. В этом случае нужно будет разбираться, например, с асинхронными ботами, чтобы иметь возможность параллельно вести два набора действий - периодическую проверку оценок и реакцию на сообщения от юзеров.
    Ответ написан
    Комментировать
  • YOLOv8-seg Масштабирование маски. Как сделать правильно?

    Vindicar
    @Vindicar
    RTFM!
    Попробуй морфологическую диляцию. Если на пальцах, она делает белыми чёрные (фоновые) пиксели изображения, у которых есть белые соседи.
    Можно поиграться с ядром (определяет, что считать соседями) и с итерациями (сколько раз повторять диляцию).

    Поскольку маски объектов обычно белые на чёрном фоне, это "раздует" маску и одновременно сгладит её края.
    Ответ написан
  • Почему не работает python-valve?

    Vindicar
    @Vindicar
    RTFM!
    В репозитории код изменялся лет 5 назад, а документация - все 7. Так что придётся самостоятельно ориентироваться по коду - или искать другой пакет.
    В принципе, можешь обойтись без with, заменив его на try: ... finally: server.close()
    Ответ написан
  • Как распарсить запрос в Python?

    Vindicar
    @Vindicar
    RTFM!
    Ну я бы описал каждое составное условие как коллекцию "имя поля - условие, применяемое на поле".
    Но возможно, лучше как-то кардинально это решитью. Например, навесить теги на обрабатываемые объекты, и делать поиск по тегам.
    Ответ написан
  • Как сделать рассылку всем пользователям которые нажали /start?

    Vindicar
    @Vindicar
    RTFM!
    Проверь тип данных user. Можно тупо print(type(user)). Обычно БД в питоне возвращают каждую строку выдачи как кортеж, даже если в строке одно значение. В этом случае нужно будет сделать telegram_id = user[0]
    Ответ написан