• Как правильно прочитать файл с сохранением типов данных?

    Vindicar
    @Vindicar
    RTFM!
    Придётся парсер писать.
    В зависимости от сложности структуры данных, может быть умеренно сложно или очень сложно.
    Например, данные всегда содержат словарь одного уровня с числовыми ключами и значениями в виде списка числе, как в твоём примере? Или могут быть варианты?
    Для простых случаев можно разобрать строку вручную. Для сложных придётся въезжать в инструмент для создания парсеров типа ANTLR.
    Ответ написан
    Комментировать
  • Почему await con.commit() вызывает ошибку ValueError?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри базовый пример, может, лучше переделать по его образу и подобию?

    pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
                                          user='root', password='',
                                          db='mysql', loop=loop)
        async with pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute("SELECT 42;")
                print(cur.description)
                (r,) = await cur.fetchone()
                assert r == 42
        pool.close()
        await pool.wait_closed()
    Ответ написан
  • Как боту не прописывать некоторые строчки?

    Vindicar
    @Vindicar
    RTFM!
    Сделай подпрограмму, хотя бы.
    def format_non_zero(items):
        message_list = []
        for format, value in items:
            if value != 0:
                message_list.append(format.format(value))
        return message_list
    
    msg_parts = format_non_zero([ #каждый элемент списка - отдельное значение+его формат. Порядок тот же.
        ("У вас money: {0}", money), #обрати внимание на строку формата!
        ("У вас bank: {0}", bank),
        ("У вас brain: {0}", brain),
    ]) #функция вернёт список строк
    await message.reply('\n'.join(msg_parts)) #соединяем строки перед отправкой.
    Ответ написан
    Комментировать
  • Как сделать некоторые функции в telegrabotapi Python?

    Vindicar
    @Vindicar
    RTFM!
    1. "with con:" закроет соединение по выходу из блока with.
    2. Зачем вообще хранить справки, если вы их генерируете на лету? Или они будут как-то ещё обрабатываться?
    3. Я бы посоветовал вынести всё, что касается работы с базой и генерации PDF в отдельный класс, а боту оставить ботово, т.е. интеграцию с телегой. Так и отлаживать проще, и код поддерживать.
    Ответ написан
    3 комментария
  • Куда выгрузить discord бота?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Почему не вызывается if в хэндлере?

    Vindicar
    @Vindicar
    RTFM!
    Это обработка нажатий на виртуальные кнопки?
    Каждое нажатие - это отдельный вызов обработчика.
    Обработчик, получивший polt, ещё ничего не знает об amf.
    Обработчик, получивший amf, уже ничего не будет знать о polt.

    Тебе нужно сохранять состояние для разных пользователей. Например, вести коллекцию пользователей, нажавших polt. Вообще тебе стоит почитать про конечные автоматы - теория будет звучать несколько заумно, но идея проста как две копейки.

    Состояние - это когда для объекта выполняется какое-то условие. Например, в нашем случае у пользователя есть два состояния - "не нажал на polt", "нажал на polt".
    Между состояниями есть переходы. В нашем случае есть один переход, который должен вызываться нажатием на polt.

    Отсюда вывод: мы для всех известных нам пользователей должны хранить их состояние. Обработчик callback_query_handler() должен при получении команды смотреть на их состояние и выполнять действия в завимости от сочетания команды и состояния. Действия могут включать в себя в т.ч. переход в другое состояние.

    Хранить состояния можешь пока что в словаре (dict), где ключ - id пользователя, а значение - код состояния. Но словарь будет потерян при перезапускке бота, так что потом тебе придётся освоить хранение в БД.
    Ответ написан
  • Почему не работает код на Python?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, оформи код кнопкой </>, а то нечитаемо.
    Во-вторых, дело в строке
    super().__init__(self.number)
    К этому моменту в self ещё нет ни одного атрибута. Унаследованный вызов __init__() создаст number и остальные - но ты пытаешься обратиться к self.number до этого вызова.
    Ответ написан
    Комментировать
  • Как отсортировать файл по алфавиту?

    Vindicar
    @Vindicar
    RTFM!
    Перепробовал множество способов из инета, говоришь...
    Тогда нужно включить голову и подумать самому. А для начала - разбить задачу на подзадачи.
    Задача №1: прочитать содержимое входного файла.
    Задача №2: превратить прочитанную строку в список элементов для сортировки
    Задача №3: отсортировать список по желаемому критерию
    Задача №4: записать отсортированный список в выходной файл.

    Теперь по пунктам.
    №1. Ты ошибся в том, что .readlines() создаёт список, где каждая строка - один элемент. У тебя все элементы списка на одной строке, так что readlines() тебе не поможет. Используем просто .read()
    with open('p022_names.txt', 'rt', encoding='utf-8') as src: #а может кодировка не utf-8? Тогда поменяй на нужную
        content = src.read() #читаем всё содержимое файла в память. Если файл размером под гигабайт, будет весело... но для маленьких файлов сойдёт
    # with позволяет гарантированно автоматически закрыть файл по выходу из блока


    №2. Гуглим работу со строками в питоне. Самый большой вопрос: может ли в имени встретиться запятая? Если нет, то решается всё очень просто:
    items = content.split(',')
    Это даст нам список строк, но с тремя оговорками.
    1) последняя запятая даст нам элемент списка - пустую строку.
    Если это недопустимо, то следует от пустых строк избавиться:
    items = [item for item in content.split(',') if item != '']

    2) Строки в списках будут в кавычках. На сортировку это не повлияет, но если нужно избавиться от них, нужен будет ещё один шаг.
    3) Если в конце строки есть перевод строки \n, то от него нужно избавиться до разбиения: content = content.rstrip()

    №3. Сортируем список прямо на месте: items.sort(). В отличие от метода .sort(), sorted() создаёт и возвращает новый сортированный список, не трогая старый. Если нужно по убыванию, items.sort(reverse=True).

    №4. content = ','.join(items) чтобы склеить элементы обратно. Если последняя запятая нужна, то content = (','.join(items)) + ','. .join() работает эффективнее, чем проход циклом for вручную.
    Ну и записать в файл:
    with open('p022_names_sorted.txt', 'wt', encoding='utf-8') as dst: # можно писать и в тот же самый файл - он уже закрыт к этому моменту, так что можем его переоткрыть для записи.
        dst.write(content)
    Ответ написан
  • Keras: как правильно отправить numpy?

    Vindicar
    @Vindicar
    RTFM!
    Ошибка говорит, что у тебя в картинке 4 канала вместо трёх.
    Я думаю, дело в cv2.IMREAD_UNCHANGED. Зачастую RGB-изображения имеют неиспользуемый 4й байт в пикселе, для выравнивания адресов пикселей в памяти. IMREAD_UNCHANGED означает, что этот байт загружается как есть, вот и получается 4 канала.
    Попробуй заменить на IMREAD_COLOR.
    Ответ написан
    2 комментария
  • Как распарсить лог на python?

    Vindicar
    @Vindicar
    RTFM!
    Для подсчёта можно использовать collections.Counter.
    Модуль csv для формирования csv файла.
    Если задача позволяет, не надо сначала загружать всё в память, а потом выгружать в csv - лучше выгружать по мере нахождения строк. Но чтобы дать подробный совет, нужно видеть пример искомых строк в лог файле.
    Также, если выражение применяется более чем 1-2 раза, посоветую использовать re.compile() с последующим методом .findall() вместо просто re.findall(), чтобы не компилить регулярку при каждом запросе.
    Ответ написан
    Комментировать
  • Как прописать список при помощи потоков?

    Vindicar
    @Vindicar
    RTFM!
    Я поддерживаю ответ dooMoob выше, но от себя добавлю: когда разберёшься с потоками, посмотри модуль queue.
    Ответ написан
    Комментировать
  • Как в aiogram передать переменную из одного хэндлера в другой?

    Vindicar
    @Vindicar
    RTFM!
    Поучите основы питона. Вот кроме шуток. Разницу между глобальными и локальными переменными, а также основы работы с классами.
    Иначе сколь-нибудь сложного бота написать будет сложно, а что получится - будет тяжело поддерживать и отлаживать.

    А конкретно по вопросу: нужно в profil() делать запрос вроде SELECT * FROM Users WHERE User_id == message.from_user.id

    И да, не надо формировать SQL-запросы через форматирование строк, это хороший способ выстрелить себе в ногу. Почитайте про работу с placeholders.
    Ответ написан
    1 комментарий
  • Как отправить музыку через bot.send_audio (telebot, python)?

    Vindicar
    @Vindicar
    RTFM!
    Ты используешь pyTelegramBotAPI? Если заглянуть на гитхаб проекта, можно найти любопытный комментарий в одном из issue:
    You can't set title and performer when you are sending audio by url, but there would be no problem if you will do the same with local file

    Т.е. параметры типа title/performer/thumb работают только при загрузке файла, а не ссылки. ФЗ правда ли это, и если да, то почему такое ограничение.
    Ответ написан
    5 комментариев
  • Почему Телеграм api блокирует client.get_entity()?

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

    Vindicar
    @Vindicar
    RTFM!
    Ну ошибку даже автопереводчик расшифрует: конструктору класса неизвестен аргумент threaded, который ты передаёшь.
    Вот почему он неизвестен - уже интереснее. Это аргумент есть там уже лет 6.
    Опечатки типа русская/латинская "e" я не наблюдаю...
    На всякий случай уточни версию пакета telebot, который у тебя стоит. Последнйи релиз у них - 3.8.1.
    Ответ написан
  • В чем ошибка sqlite python?

    Vindicar
    @Vindicar
    RTFM!
    img2 = open(f'{maxmark[2][0]}', 'rb')
                mime = magic.Magic(mime=True)
                filename = mime.from_file(maxmark[2])


    Строка один подразумевает, что имя файл - это maxmark[2][0]. Тогда maxmark[2] - это наверно, коллекция, кортеж, список или словарь, потому что я не думаю что вы открываете файл с именем из одного символа. К слову, зачем f'{maxmark[2][0]}'?
    Но в строке три судя по названию метода, нужно передать строку с путём к файлу файла - а передаётся туда maxmark[2], которое мы уже определили как возможный кортеж.
    Это совпадает с текстом ошибки.
    Ответ написан
  • Как проверить свернуто ли окно?

    Vindicar
    @Vindicar
    RTFM!
    Насколько я понимаю, на чистом питоне это будет сделать затруднительно. Нужно использовать платформо-зависимые инструменты.
    Если под Windows, то можно использовать WinAPI. Чтобы обращаться к ним под питоном, используй пакет pywin32.
    Функция IsIconic() проверяет, свёрнуто ли окно с указанным дескриптором в панель задач. Передай ему дескриптор окна, которое надо проверить.
    Функция GetForegroundWindow() получает дескриптор окна, которое сейчас в фокусе. Не уверен, идёт ли речь об окне верхнего уровня, или об элементе управления в фокусе (элементы управления - тоже окна). Оно возвращает дескриптор окна, если дескриптор равен желаемому - значит, искомое окно сейчас в фокусе.
    Так как тебе потребуется узнать дескриптор нужного окна, посмотри также FindWindow(). Имя класса окна надёжнее, но его труднее узнать. Заголовок окна может меняться (например, у браузера он зависит от текущей вкладки), но зато его узнать легче. При этом речь идёт о точном совпадении заголовка окна!
    Если заголовок меняется, то стоит использовать EnumWindows(), но с ней сложнее работать.
    Ответ написан
    Комментировать
  • Определение приложения Discord Api?

    Vindicar
    @Vindicar
    RTFM!
    Навскидку - запускаешь приложение с этим токеном и вызываешь API Application Info.
    Для discord.py это будет Client.application_info(), для других либ - что-то своё. Вручную делать запросы я бы не стал.

    Либо я не понял о каком именно токене речь.
    Ответ написан
  • Как добавить к названию переменой символ?

    Vindicar
    @Vindicar
    RTFM!
    temp = [str(res["daily"][i]["temp"]["day"]) for i in range(0, 9)]
    print('Всего:', len(temp))
    print('Все:', temp)
    print('Нулевой:', temp[0])

    Учитесь работе со списками, пригодится.
    Ответ написан
    1 комментарий
  • Есть 2 блока, на погоду и на поговорить. Как сделать так чтоб если я выбрал "Погода" то он показывал погоду без повторного запроса?

    Vindicar
    @Vindicar
    RTFM!
    Храни состояние для пользователя.
    Т.е. для каждого пользователя нужна какая-то структура данных, которая будет хранить информацию - запрашивал ли пользователь погоду (и если да, то в каком городе), находится ли пользователь в режиме разговора, и так далее.
    Кроме того, нужно решить - хочешь ли ты, чтобы бот запоминал это между перезапусками? Если можно ограничиться запоминанием в рамках одной рабочей сессии, то дело упрощается. Если нет, то нужно будет разбираться с базами данных.
    Ответ написан
    Комментировать