Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
drygdryg

Виктор Голованенко

Python-разработчик
  • 102
    вклад
  • 0
    вопросов
  • 132
    ответа
  • 51%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • О документациях?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Для работы с официальной документацией Python и поиска по ней можно использовать сервис DevDocs: https://devdocs.io/python/
    Он удобен тем, что позволяет искать по документации к различным версиям Python одновременно. Также он позволяет скачивать документацию и читать её без подключения к интернету, следить за своевременным обновлением скачанных документаций.
    Ответ написан 4 часа назад
    Комментировать
    Комментировать
  • Как вывести все качества видео одного видео pytube?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Например, так:
    from pytube import YouTube
    
    yt = YouTube("https://youtu.be/uCNWuSbPnt4")
    resolutions = sorted(
        set(stream.resolution for stream in yt.streams.filter(type='video')),
        key=lambda s: int(s.split('p')[0])
    )
    print(*resolutions, sep='\n')

    Результат выполнения программы:
    144p
    240p
    360p
    480p
    720p
    1080p
    1440p
    2160p
    Ответ написан 4 часа назад
    Комментировать
    Комментировать
  • Python telegraph асинхронный upload изображений, как сделать?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Используйте aiohttp либо httpx в качестве HTTP-клиента вместо Requests, т.к. последний не поддерживает asyncio.
    Ответ написан 01 февр.
    Комментировать
    Комментировать
  • Python, VKBottle, SQL. Как ограничить доступ к команде на время?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    В этой строке метод fetchone() возвращает один результат в виде кортежа полей, в вашем случае состоящего из одного элемента — значения поля time:
    last_command_use_time = cursor.fetchone()
    Поэтому вы можете извлечь из него первый элемент и положить его в last_command_use_time:
    last_command_use_time = cursor.fetchone()[0]
    Никогда не используйте f-строки или иной способ форматирования для подстановки значений в SQL-запросы: это может вызвать проблемы с безопасностью приложения. Как верно отметил Vindicar, лучше использовать средства вашего драйвера СУБД для подстановки параметров в запросы (parametrized quieries).
    К тому же, для ограничения частоты выполнения каких-либо действий в вашем приложении обычно лучше использовать решения на базе быстрых хранилищ "ключ-значение" вроде Redis или Memcached, чем на базе реляционных СУБД (коей является PostgreSQL).
    Советую обратить внимание на инструмент PyrateLimiter: он обеспечивает ограничение частоты выполнения функции (либо корутины, что может быть полезным в вашем случае) и в качестве хранилища может использовать оперативную память (queue.Queue), Redis или SQLite.
    Ответ написан 25 янв.
    2 комментария
    2 комментария
  • Как называются "\n","\r","\t"... в строках?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Это специальные управляющие последовательности (англ. escape sequences), которые используются для записи пробельных (непечатных) символов (англ. whitespace characters). Все эти символы соответствуют шаблону \s в регулярных выражениях:
    import re
    
    print(all(re.fullmatch(r'\s', string) for string in ('\n', '\r', '\t', ' ')))  # True
    Ответ написан 12 янв.
    1 комментарий
    1 комментарий
  • Какой графический драйвер у nvidia GT430?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Вы можете выбрать проприетарный драйвер NVIDIA (для GT 430 — версия 390.xx) либо открытый nouveau (open source). Советую сначала попробовать открытый, и если с ним будут проблемы, то установите проприетарный из этого пакета AUR: https://aur.archlinux.org/packages/nvidia-390xx-dkms
    Ответ написан 04 янв.
    1 комментарий
    1 комментарий
  • Что делать с папкой windows, которая весит около 60 Гб?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Используйте Dism++ для очистки ненужных временных системных файлов.
    Ответ написан 30 дек. 2022
    Комментировать
    Комментировать
  • После каждого обновления программ в Pamac, места на диске становится меньше, как это остановить?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Насколько я понимаю, вы обновляетесь через программу Pamac ("Установка и удаление программ"). Arch Linux (скорее всего, и Manjaro) не поддерживает частичные обновления — нельзя устанавливать новые пакеты, не обновляя при этом все ранее установленные пакеты. Pamac не позволяет производить частичные обновления или установку новых пакетов без обновления устаревших. Но на свой страх и риск вы можете установить пакет через pacman, не обновляя всю систему:
    pacman -Sy <имя пакета>
    Ответ написан 29 дек. 2022
    Комментировать
    Комментировать
  • Закреп поста с помощью бота в тг?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Сначала отправьте сообщение через sendMessage, затем закрепите его через pinChatMessage, в качестве chat_id передайте идентификатор пользователя или группового чата, куда отправляете сообщение.
    Метод в pyTelegramBot для этого: https://pytba.readthedocs.io/en/latest/sync_versio...
    Ответ написан 29 дек. 2022
    1 комментарий
    1 комментарий
  • Как преобразовать список в словари?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Например, с помощью генератора словаря (dict comprehension) и range:
    a, b, c, d = 'abcd'
    lst = [1, a, b, c, d, 2, a, b, c, d, 3, a, b, c, d]
    result = {lst[i]: {lst[i+1]: lst[i+2], lst[i+3]: lst[i+4]} for i in range(0, len(lst), 5)}
    print(result)  # {1: {'a': 'b', 'c': 'd'}, 2: {'a': 'b', 'c': 'd'}, 3: {'a': 'b', 'c': 'd'}}

    или с помощью цикла:
    result = {}
    for i in range(0, len(lst), 5):
        result[lst[i]] = {lst[i+1]: lst[i+2], lst[i+3]: lst[i+4]}
    print(result)  # {1: {'a': 'b', 'c': 'd'}, 2: {'a': 'b', 'c': 'd'}, 3: {'a': 'b', 'c': 'd'}}
    Ответ написан 29 дек. 2022
    Комментировать
    Комментировать
  • ОС для создания терминала киоска?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Можно попробовать использовать готовые дистрибутивы Linux для создания киоска:
    https://porteus-kiosk.org/
    https://webconverger.com/
    Либо попробовать сделать свою сборку какого-либо существующего дистрибутива и упаковать её в установочный ISO. Насколько мне известно, достаточно несложно кастомизировать образ Arch Linux (ArchISO) под свои задачи:
    https://wiki.archlinux.org/title/Archiso
    https://viperfang.net/project/arch_kiosk
    https://gist.github.com/ctrlaltdylan/01255fc86f2cb...
    https://www.reddit.com/r/archlinux/comments/d5d5uc...
    Либо сделать на базе Debian:
    https://abc101.medium.com/simple-kiosk-box-by-debi...
    https://github.com/josfaber/debian-kiosk-installer

    Скрипт для настройки Debian или Arch Linux для работы в режиме киоска: https://github.com/Salamek/chromium-kiosk
    Ответ написан 28 дек. 2022
    1 комментарий
    1 комментарий
  • Как сделать время пробытия юезра в боте?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    1. Определите момент, с которого вы будете отсчитывать дни, сколько пользователь "с вами": это может быть запуск бота командой /start, либо какое-то другое значительное действие (например, регистрация);
    2. Запишите этот момент в виде даты и времени в базу данных.
    3. Когда нужно отобразить, сколько пользователь с вами, берите текущее время и вычитайте из него время из базы данных. Для этого удобно использовать модуль datetime:
    import datetime as dt
    
    joined = …  # Момент, с которого пользователь начал пользоваться ботом (тип данных dt.datetime, из БД)
    now = dt.datetime.now()
    days_with_us = (now - joined).days
    msg = f"Вы с нами дней: {days}"

    Если нужно красиво выводить разницу во времени (вроде "9 дней, 2 часа" или "2 года, 3 месяца 7 дней"), то можно воспользоваться сторонними библиотеками, которые позволяют перевести объект datetime.timedelta в удобочитаемое представление. Например, Humanize: https://python-humanize.readthedocs.io/en/latest/
    Ответ написан 19 дек. 2022
    Комментировать
    Комментировать
  • Как выгрузить из приложения android ресурсы для локализации на другие языки?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Используйте Apktool для распаковки и сборки APK-файла.
    Ответ написан 06 дек. 2022
    Комментировать
    Комментировать
  • Почему не устанавливается библиотека aiogram в VS Code?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Скорее всего, у вас установлен недавно выпущенный Python 3.11, для которого ещё не все пакеты в PyPI, от которых зависит aiogram, успели сформировать свои бинарные сборки (архитектурно-зависимые wheels).
    Два пути решения проблемы:
    - установить Microsoft C++ Build Tools для сборки нативных частей пакетов, которые вы устанавливаете из PyPI: https://visualstudio.microsoft.com/visual-cpp-buil...;
    - откатиться до прошлой мажорной версии Python, для которой в PyPI есть собранные под вашу ОС и архитектуру wheels (например, 3.10).
    Ответ написан 20 нояб. 2022
    1 комментарий
    1 комментарий
  • Как сменить директорию профиля Google Chrome?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Можно использовать аргумент командной строки --user-data-dir.
    См. https://chromium.googlesource.com/chromium/src/+/H...
    Ответ написан 17 нояб. 2022
    1 комментарий
    1 комментарий
  • Как исправить краш вовремя бездействия?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    В решении ловятся только ошибки, связанные с API. А у вас ошибка, связанная с сетевым подключением. Нужно добавить обработку соотв. исключения. Чтобы обрабатывать все исключения, связанные с проблемами сети, используйте ConnectionError:
    from requests.exceptions import ConnectionError
    ...
    except (telebot.apihelper.ApiException, RequestException) as e:
    ...

    См. исключения в Requests.

    Также, если вы используете polling для получения обновлений Bot API, то в продакшене лучше использовать веб-хуки.
    https://github.com/eternnoir/pyTelegramBotAPI/tree...
    Ответ написан 15 нояб. 2022
    Комментировать
    Комментировать
  • Как запретить отправлять картинки?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Обработчик, который будет срабатывать только на файлы картинок, отправленные как фотографии (со сжатием):
    import telebot
    
    
    API_TOKEN = '<api_token>'
    
    bot = telebot.TeleBot(API_TOKEN)
    
    
    @bot.message_handler(content_types=['photo'])
    def detect_photo(message: telebot.types.Message):
        bot.reply_to(message, "Обнаружена картинка.")
    
    
    bot.infinity_polling()

    Если нужно обнаруживать картинки, отправленные как документы, можно проверять тип MIME документа:
    def is_photo_document(message: telebot.types.Message) -> bool:
        mime_type = message.document.mime_type
        return mime_type in ('image/jpeg', 'image/png', 'image/webp')
    
    
    @bot.message_handler(func=is_photo_document, content_types=['document'])
    def detect_photo_as_document(message: telebot.types.Message):
        bot.reply_to(message, "Обнаружена картинка, отправленная документом.")
    Ответ написан 15 нояб. 2022
    Комментировать
    Комментировать
  • Как ответить на все непрочитанные чаты через Telethon?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    1. Пройтись циклом по списку диалогов (что вы называете чатами) с помощью iter_dialogs .
    2. Получить значение unread_count каждого диалога, узнать, есть ли непрочитанные сообщения: https://docs.telethon.dev/en/stable/modules/custom...
    3. Отправить сообщение в диалог, если в нём есть непрочитанные сообщения, с помощью send_message, указав в качестве значения entity объект диалога.
    Ответ написан 11 нояб. 2022
    Комментировать
    Комментировать
  • Vkbottle Python Bot?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Для периодического выполнения какого-либо действия можно использовать планировщик/очередь задач в вашем проекте, например, APScheduler, Celery или schedule.
    Ответ написан 11 нояб. 2022
    Комментировать
    Комментировать
  • Как упростить код?

    drygdryg
    Виктор Голованенко @drygdryg
    Python-разработчик
    Использовать функцию sum и генераторы (generator expressions) для расчёта общего количества и общей стоимости:
    for good_name, good_id in goods.items():
        goodss = store[good_id]
        total_quantity = sum(i["quantity"] for i in goodss)
        total_price = sum(i["quantity"] * i["price"] for i in goodss)
        print(f"{good_name} - {total_quantity} штук, стоимость {total_price} рублей")
    Ответ написан 10 нояб. 2022
    Комментировать
    Комментировать
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • Следующие →
Самые активные сегодня
  • Drno
    • 8 ответов
    • 1 вопрос
  • meidi
    Dlaynet tenyalD
    • 4 ответа
    • 3 вопроса
  • rPman
    • 7 ответов
    • 0 вопросов
  • Dr. Bacon
    • 6 ответов
    • 0 вопросов
  • vabka
    Василий Банников
    • 5 ответов
    • 0 вопросов
  • mayton2019
    • 4 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации