Задать вопрос
  • Почему бот не запускается?

    @o5a
    deployingseverus, А что именно поменяли? Отразите в коде тогда, если уже изменили. У вас ни хендлеров в текущем коде нет, и запуск бота тоже некорректный.
    async def main():
        bot = Bot(API_TOKEN)
        await dp.start_polling(bot)


    Документация https://docs.aiogram.dev/en/v3.1.1/
    Написано
  • Как подставить значение в запрос sqlite?

    @o5a
    Uadfl, прямым ответом на ваш вопрос будет использовать форматирование строк, например через f-строки, как предложил ниже wincrx, потому что параметризированые запросы (механизм через '?') для подстановки названий идентификаторов в принципе не работает, там только форматировать строку запроса. Просто это в целом не особо правильно делать, и может быть даже опасно, если вы эти названия полей будете не сами жестко контролировать, а брать из ввода пользователя.
    Но если бы объяснили, зачем решили так динамически выбирать названия полей, вам тут могли бы подсказать, как сделать правильно.
    Написано
  • Как подставить значение в запрос sqlite?

    @o5a
    Uadfl, опять же, Вы озвучили свой способ решения, который как тут уже объяснили, выглядит сомнительно в приложении к реляционным БД. А хотелось бы увидеть, зачем изначально вам такое потребовалось, динамически подставлять названия полей.
    Выглядит как очередная Проблема_XY

    Если простыми словами, это как если бы обратились с вопросом:
    - Как мне укрепить микроскоп, а то он быстро выходит из строя
    - *пожав плечами, предлагают решения по укреплению конструкции микроскопа*
    А на самом деле выясняется, что автор вопроса использовал микроскоп, чтобы забивать гвозди, и правильным ответом на подобный вопрос было бы "использовать молоток", а не пытаться укрепить микроскоп.
    Написано
  • Как подставить значение в запрос sqlite?

    @o5a
    Uadfl, изменить свой подход к структуре таблиц. Поля как правило не должны подставляться динамически, при запросе уже известно, какое поле за что отвечает. А что конкретно изменить, не известно, пока не опишете, для чего вам понадобилось динамически выбирать поля, зачем вообще так решили сделать.
    Написано
  • Не находит текст извлечённый с помощью pytesseract в excel?

    @o5a
    Jimm24, насколько вижу, текст на картинке и в ячейках напрямую не соответствует (на картинке еще и имя есть, которого в самом Excel нет). Поэтому и совпадений не находило. Но я так понял с этим уже решили.

    По поводу цикла, хотели, чтобы программа висела запущенной, и по каждому нажатию кнопки в окне программы она делала новый скрин, распознавала и обрабатывала Excel?
    Тогда можно сделать так:
    Весь кусок снятия скриншота и сохранения файла (начиная с screen = ) для удобства обернуть в функцию, например screengrab()
    И затем свой поиск обернуть в бесконечный цикл с запросом ожидания нажатия пробела (ну или другой кнопки по желанию):
    print('Жми пробел для начала обработки')
    while True:
        keyboard.wait('space')
        print('Погнали...')
        # запуск функции скриншота
        screengrab()
        for sheet in allSheetNames:
            print('Текущее имя листа {}'.format(sheet))
            currentSheet = theFile[sheet]
            CellLetter = (find_cell())


    Если от всего этого требовалось только распознавание сграбленного скриншота, то можно было бы опустить сохранение в файл и последующее чтение, а просто в этой функции screengrab сразу возвращать результат (картинку), и передавать его в функцию поиска напрямую.
    Написано
  • Как удалить ссылку из txt после использования?

    @o5a
    altinov01, а для чего вообще все это нужно? Судя по методу похоже, что планируется просто выдавать при каждом вызове случайную неповторяющуюся ссылку из файла? Ради этого все затеивалось?
    Тогда можно сделать по-другому: один раз прочитать ссылки из файла, перемешать их случайным образом и затем по одной выдавать. Получится то же самое только без необходимости каждый раз открывать и менять файл.
    Можно например так сделать
    # класс для открытия файла и создания итератора, из которого затем будем по одной брать случайные ссылки
    class RandomLink():
        def __init__(self, filename):
            with open(filename) as f:
                lines = f.read().splitlines()
                random.shuffle(lines)
                self.gen = iter(lines)
    
        def __call__(self):
            return self.__next__()
    
        def __next__(self):
            # если закончились ссылки в файле, то просто возвращаем None. тут уже смотря что хотели реализовать.
            try:
                return next(self.gen)
            except StopIteration:
                return None
    
    # затем "инициализируем" наш объект, при каждом обращении к которому он будет выдавать новую неповторяющуюся ссылку
    random_link = RandomLink('ls_img.txt')
    
    print(random_link())
    await message.answer_photo(random_link())
    .. и т.п.
    Написано
  • Создал код бота в дискорде с помощью ChatGPT почему бот не хочет отвечать на команду?

    @o5a
    Так теперь нужно просто спросить у ChatGPT, где ошибка в этом коде.
    Написано
  • Почему не работает код?

    @o5a
    chupipapa, потому что отступы важны. Если последняя строчка находится внутри if, то работать и не будет, она должна быть непосредственно внутри цикла for.
    Написано
  • Как сделать так чтобы данные перезаписывались, а не добавлялись новые?

    @o5a
    Goobee, Только стоит учитывать, что параметр if_exists = 'replace' не заменяет совпадающие данные в таблице, а полностью ее пересоздает и записывает с нуля. Важно помнить, если планируется догружать данные из новых источников.
  • Как передать значенние через переменные?

    @o5a
    Похоже что-то не то сделали. Установленные параметры должны были действовать на протяжении всего сеанса. Когда вы их разделяли, это все делалось в пределах одного соединения или же разных?
    Лучше приведите код, как вы это делали.
  • Как превратить str в словарь (2 часть)?

    @o5a
    Скорее всего автору подобные значения (значения-объекты) и не нужны. Можно еще по-простому их просто "сбросить" до строк, передав значение в параметр default, например так:
    import json
    
    a = {'content_type': 'text', 'id': 6450, 'message_id': 6450, 'user': int}
    s = json.dumps(a, default=lambda x:'empty')
    print(s)

    Но по-хорошему действительно лучше сначала из словаря данных удалить весь ненужный мусор.
  • Как превратить str(словарь) обратно в словарь?

    @o5a
    Андрей Нифнафов, телеграм не "создает одинарные кавычки", это уже вы их получаете, потому что на каком-то этапе данные в виде словаря преобразовываете в строку.

    Покажите свой код, откуда вы берете вот это своё
    {'id': '4315398315674119871', 'from_user': {'id': 1004756967, 'is_bot': False ...
    в виде строки и тут подскажут, как нужно было правильнее его использовать.

    Если используете API телеграм, то и данные получаете в виде полноценных словарей (или json, что по сути преобразовывается в словарь).

    Предположу, что вы полученный объект (message) сами или выводите через print() или где-то преобразовываете str() поэтому и получается расхождение формата. А нужно напрямую обращаться к полям этого объекта, т.е. message.id
  • Почему DB browser for sqlite и питон выдают разные результаты запроса?

    @o5a
    Phys_Math_Man, При запросе SELECT база итак показывает "последнее сохраненное" состояние. Как только какое-то подключение сделало изменения и их сохранило (commit), состояние базы меняется и будет видно для другого подключения уже измененное.
  • Почему DB browser for sqlite и питон выдают разные результаты запроса?

    @o5a
    Phys_Math_Man,
    ну а можно как-то посмотреть именно текущее состояние базы данных в программе python?

    В базе итак оно "текущее", когда смотришь. Просто для каждого соединения изменения данных действуют только в пределах этого соединения (запущенной программы) до тех пор, пока не сделан commit.
    Чтобы было понятнее, это можно сравнить с тем, что когда запускаете программу на python и делаете какие-то изменения переменных, они у вас содержат актуальные результаты только пока программа запущена. Если ее закрыть/запустить заново, то значения снова сбросятся ведь.
    Так и тут, пока активно соединение из конкретно запущенной программы, вы эти изменения видите, но в базу они еще не сохранены. Для этого как раз и есть commit.
  • Как исправить код? Что я делаю не так?

    @o5a
    qot, а в чем выражается "не работает". Запускаете, а программа через некоторое время завершается без ошибок, не выводя распознанный текст? В таком случае возможно у вас в системе есть еще какой-то микрофон и пытается считать звук с него. У speech_recognition.Microphone можно принудительно указать другое устройство, параметром device_index.
    Возможно стоит попробовать постоянную прослушку микрофона с распознаванием:
    https://github.com/Uberi/speech_recognition/blob/m...
  • Питон ставит правила(сарказм) по f.read, что делать, не работает как должно. Есть возможности?

    @o5a
    Yooshyasha, в таком случае лучше и использовать json
    import json
    
    # данные в словаре
    data = {'id': 5750829707, 'first_name': 'SONYASHKA||_♡♥︎||', 'last_name': None, 'username': 'Sonnya17l', 'phone': None, 'bot': False, 'deleted': False, 'scam': False}
    # переводим в строку, которую можно сохранять в файл
    text = json.dumps(data)
    # и из которой потом снова легко получаем наш полноценный словарь
    data = json.loads(text)
    print(data['username'])
  • Питон ставит правила(сарказм) по f.read, что делать, не работает как должно. Есть возможности?

    @o5a
    1. Про то, почему не работает сама проверка, уже написали: read() нужно делать 1 раз, далее работать с этим считанным содержимым, а не снова пытаться делать read().

    2. Для разбора изначальной строки в виде словаря
    {'id': 5750829707, 'first_name': 'SONYASHKA||_♡♥︎||', 'last_name': None, 'username': 'Sonnya17l', 'phone': None, 'bot': False, 'deleted': False, 'scam': False}
    лучше использовать не split, а модуль json (json.loads). Только и сохранять ее нужно тоже в json (json.dumps). Это в случае, если изначальный файл (before) вы сами и формируете. Очень похоже, что вы его и формируете, только не совсем корректно, видимо путем сохранения через str(данные в виде словаря)
    Если же изначальный файл полностью приходит извне и уже идет в таком "кривом" формате, то можно использовать ast.literal_eval
    import ast
    
    text = "{'id': 5750829707, 'first_name': 'SONYASHKA||_♡♥︎||', 'last_name': None, 'username': 'Sonnya17l', 'phone': None, 'bot': False, 'deleted': False, 'scam': False}"
    data = ast.literal_eval(text)
    # напрямую запрашиваем значение по словарю
    print(data['username'])
  • Как получить числовой массив из базы данных?

    @o5a
    Dmitry,
    Теперь на ось у я должен тоже передать массив данных из столбца Январь в таком виде [9124, 8652, 7592]
    Вот этот момент не понимаю как реализовать.

    Почему "столбца Январь"? Что за структура данных у вас такая странная? Столбцы год, месяц, станция - это ваши условно говоря столбцы признаков. А данные соответственно в своем столбце: если это какая-то сумма, то 'amount' например, или еще какой-то показатель. Это поле в SELECT запроса и выдавайте.
    Приведите лучше пример ваших данных в таблице (значения полей построчно) и что от запроса хотите для этих данных получить.
  • Как автоматизировать запись в sqlite на Python, регулируя количество перезаписываемых переменных?

    @o5a
    DRON_161Rus, может зависеть от базы данных. Но например в Postgres update по сути создает новую запись, так что выгоды от попытки обновить только определенные поля, не будет.
  • Как автоматизировать запись в sqlite на Python, регулируя количество перезаписываемых переменных?

    @o5a
    DRON_161Rus, Потому что в реальности если у вас есть какая-то форма параметров (по сути сама таблица или же ее представление, view, с измененным набором полей), то при ее изменении вы напрямую и записываете полностью все те поля, что в ней и были, не разбираясь, какое изменилось, а какое нет. Если значение не меняли, после update оно просто и будет заполнено старым значением.
    Это если вы планируете обновлять именно всю строку данных. Как пример: пользователь меняет свою страницу профиля: какие-то поля изменил, какие-то нет, но в таблицу профиля просто пишете все поля, не разбираясь, какие именно из них изменились.
    Если же вы хотите свою функцию использовать как некий универсальный обработчик, т.е. меняется какой-то параметр записи - вызывается эту UPD_in_db с изменением данного параметра, то в таком случае это как правило только 1 параметр и будет, а не какой-то нефиксированный список разных полей.