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

    Vindicar
    @Vindicar
    RTFM!
    1. Если интервал обновления известен, и некоторая задержка между обновлением файла и обновлением видимой картинки не критична, то просто заворачиваешь код в цикл while с нужной задержкой. Для задержки можешь использовать параметр waitKey(), это задержка в миллисекундах.
    2. Если обновление нерегулярное, а обновлять изображение нужно немедленно по изменению файла, то ставь пакет watchdog, он позволяет реагировать на изменение файла.
    Ответ написан
    Комментировать
  • Как с помощью лямбда функции изменить значение в словаре?

    Vindicar
    @Vindicar
    RTFM!
    про update() уже написали, от себя добавлю dict_.__setitem__('a', 10)
    Ответ написан
    Комментировать
  • Как удалить последнюю запятую в списке?

    Vindicar
    @Vindicar
    RTFM!
    Открой для себя метод str.join() и генераторные выражения
    ",".join( f"'{n}'" for n in glob.iglob(...) )
    Я надеюсь, в имени файла у тебя не попадётся апострофов.
    Ответ написан
    9 комментариев
  • Можно ли задать размеры и расположение консольного окна при запуске через subprocess на python?

    Vindicar
    @Vindicar
    RTFM!
    По-простому - нет. Можно через задницу, т.е. через WinAPI.
    Лучше напиши, зачем тебе это - может, проще не использовать консоль?
    А мне по-простому и не интересно

    * используй ctypes для работы с функциями winapi
    * Функция WINAPI EnumWindows() чтобы найти все окна в системе
    * Функция WINAPI GetWindowThreadProcessId() чтобы узнать ID процесса, которому принадлежит окно.
    * таким образом ищешь дескриптор окна своего дочернего процесса
    * Функции WINAPI SetWindowPos() + SetWindowSize(), чтобы позиционировать найденное окно

    Ну и да, не будь врединой, не ставь окно в 0,0. Люди вроде меня, которые предпочитают таскбар наверху, то и дело вынуждены вытаскивать из-под него заголовки окон, потому что погромисты думают, что наверху экрана никогда ничего нет.
    Ответ написан
    Комментировать
  • Как пропустить большой файл?

    Vindicar
    @Vindicar
    RTFM!
    Смотришь заголовки ответа, в частности заголовок Content-Length. Он содержит длину содержимого в байтах. Имей ввиду, его присутствие не гарантируется (хотя сейчас почти все его отправляют).
    Ответ написан
    Комментировать
  • Как указать тип переменной?

    Vindicar
    @Vindicar
    RTFM!
    Не очень ясно, что требуется.
    Если тебе требуется помещать в эту переменную экземпляры класса Language, то пишешь compiler: Language

    Если же у тебя есть набор строковых значений, которые там могут быть, оформи их как enum.Enum и пропиши этот класс.
    class CompilerEnum(enum.Enum):
        C = 'C'
        CPP = 'C++'
        ADA = 'Ada'
        FORTRAN = 'Fortran'
    
    class ApiCallData(t.NamedTuple):
        code: str
        compiler: CompilerEnum
        stdin: str


    Это подразумевает, что ты знаешь список языков на момент запуска скрипта.
    Если это не так, то статическая типизация не поможет, тебе придётся прописывать тип str и проверять корректность вручную.
    Ответ написан
    Комментировать
  • Хочу написать функцию (python) по изменению какого элемента списка массивов(np.array) со списками, но выдает ошибку, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    for a in self.weights a будет не индексами, а элементами списка. В твоём случае - массивами numpy. Аналогично
    for b in a: будет не индексами строк массива, а самими строками
    for c in b: будет не индексами столбцов, а значениями ячеек. Так что
    self.weights[a][b][c] получит вместо чисел-индексов массивы и сойдёт с ума.

    А вообще, то что ты пытаешься сделать, делается тривиальнейше.
    x = np.randint(-1000, 1000, size = (2, 3), dtype=np.float32)  # массив случайных чисел, две строки, три столбца
    x /= 100.0  # делим поэлементно на сто

    В список завернёшь сам, хотя я не понимаю почему список, а не еще одно измерение в массиве.
    Ответ написан
    Комментировать
  • Противоположность not?

    Vindicar
    @Vindicar
    RTFM!
    if bbb:
    Сработает, но не всегда.
    Нужно иметь ввиду, что истинность в питоне - штука расплывчатая. Например:
    0, 0.0 - ложны, ненулевые числа - истинны.
    пустая строка - ложна, непустая строка - истинна
    пустой список / словарь / множество - ложны, непустые - истинны
    None ложно всегда.

    А вот для других классов результат не всегда однозначен.
    Если класс описывает для себя понятие ложности и истинности (определяет метод __bool__()), то он может сам решать, когда его экземпляр будет ложным, а когда истинным (так же как это делает список).
    Если же класс это не описывает, его экземпляры всегда истинны.
    Ответ написан
    1 комментарий
  • Как вытащить все белые объекты и измерить их белизну OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    Преобразуй кадр в цветовую систему HSV, ищи пиксели, у которых канал Saturation ниже заданного порога (т.е. они более-менее серые), а канал Value выше заданного порога (т.е. они более-менее яркие). По полученной маске уже отбирай пиксели для анализа.

    Либо можно схитрить, если использовать более сложный эталон, например, шахматную доску. cv2.findChessboardCorners() позволит найти координаты углов *внутри* доски известного размера, например, для доски 8х4 нужно указывать размер 7х3. Найди крайние угловые точки, извлеки этот кусок кадра. На нём точно будут только светлые и тёмные пиксели твоего эталона, чей цвет ты контролируешь. Прогони пороговое преобразование алгоритмом Otsu (есть в опенцв из коробки), получишь маску светлых пикселей. Их уже анализируешь.
    Ответ написан
    5 комментариев
  • Как вставить данные в строку Python?

    Vindicar
    @Vindicar
    RTFM!
    Фигурная скобка в начале строки (и в пачке других мест) тебя не смутила? Заэкранируй её.
    Ну или просто используй старый стиль форматирования, через %. В нём фигурные скобки не являются спецсимволами.
    Ответ написан
  • Как подключить к mysql по SSH спомощью библиотеки aiomysql?

    Vindicar
    @Vindicar
    RTFM!
    Что ты вообще подразумееваешь под "подключиться к mysql по SSH"? Сделать проброс порта через SSH, чтобы достучаться до сервера БД, который иначе не доступен?
    Так это не задача либы mysql вообще. Либо держи SSH-туннель поднятым отдельной программой, либо используй специализированную библиотеку типа sshtunnel. В обоих случаях отдавай aiomysql тот локальный порт, на котором заканчивается твой SSH-туннель.
    Ответ написан
  • Как сделать так, чтобы цикл не прерывался при срабатывании alarm clock?

    Vindicar
    @Vindicar
    RTFM!
    если код выполняется дольше n секунд

    Вынеси выполняемый код в отдельный процесс через multiprocessing, по истечении таймаута либо оставляй процесс "как есть", либо убивай принудительно.
    В противном случае ты скорее всего не сможешь принудительно завершить код, который делает неизвестно что, и при этом не оставить программу в непредсказуемом состоянии.
    Ответ написан
    Комментировать
  • Как с помощью дискорд бота отправлять фотографии в телеграм канал?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, причем тут парсинг?
    Во-вторых, какая библиотека используется для телеги и как в неё отправлять фото? Найди этот кусок документации, он потребуется.
    В-третьих, нужно проверить наличие приложенных фото в сообщении дискорда, скачать их в файл, отправить в телегу, удалить файл. Каждое из этих действий гуглится.
    Если либа для телеги принимает для отправки фото файловый объект (а не имя файла!), то можно схитрить и использовать что-то типа пакета requests для скачивания. requests даёт для скачиваемого ресурса "как бы файл", который можно напрямую скормить в библиотеку для телеграмма. Тогда не придётся возиться со временными файлами, будет чуток проще.
    Готовый код не проси.
    Ответ написан
    Комментировать
  • Имеется скрипт на Python с OpenCV как транслировать результат(сделать источником видео) в skype, zoom или любую другую программу в реальном времени?

    Vindicar
    @Vindicar
    RTFM!
    Это НЕ простая задача, и сделать её самостоятельно малореально. Про кросплатформенность можно забыть, портируемость обеспечить тоже будет не столь тривиально.
    В качестве костыльного решения можно попробовать установить пакет pyvirtualcam, но у него нетривиальные зависимости. Может потребоваться установить OBS и плагин OBS Virtual Сamera в придачу.
    Ответ написан
    Комментировать
  • Как достать все файлы из субдиректории, перенести и переименовать?

    Vindicar
    @Vindicar
    RTFM!
    Сразу скажу, я исхожу из того, что целевые каталоги находятся НЕ там же, где исходные. Иначе программа усложняется раз в пять.

    Пишем алгоритм.
    1. Для каждого каталога:
    2. Для каждого файла в каталоге:
    3. Определяем каталог, куда этот файл дожен быть перемещён.
    4. Проверяем, есть ли в каталоге файл с таким именем.
    5. Если есть, то добавляем к исходному имени суффикс (i). Увеличиваем i, пока не найдём незанятое имя.
    6. Определив имя, переносим/копируем файл в целевой каталог.

    Перенести это на питоне не будет сложно, модуль pathlib очень удобен для таких манипуляций. Максимум, написать небольшую функцию для реализации п. 5.

    def find_unused_name(dir: pathlib.Path, basename: str) -> str:
        ...  # тут реализуем пункт 5, и возвращаем имя с правильным суффиксом.
    Ответ написан
    Комментировать
  • Как обработать ошибку?

    Vindicar
    @Vindicar
    RTFM!
    Что-то типа
    @DataBase.error
    async def DataBase_error(ctx, error):
        pass  # тут твоя обработка. error - объект исключения, потомок discord.ext.commands.CommandError

    По точному классу исключения можно понять, что именно произошло.
    Ответ написан
    Комментировать
  • Как указать второй параметр?

    Vindicar
    @Vindicar
    RTFM!
    Включить логику.
    options, судя по виду - список из словарей. Один словарь описывает один параметр. Значит, первое, что нужно сделать - попробовать описать список из двух словарей. У тебя сейчас один словарь, но с дублирующимися ключами. Нужно из него сделать два отдельных словаря.

    Вообще посоветую поучить азы питона сначала. Подобное умозаключение не должно быть запредельно трудным, как и его реализация. А если оно трудное - значит, за ботов браться рановато.
    Ответ написан
    Комментировать
  • Как можно сделать примитивный интерфейс для скрипта на pyrogram?

    Vindicar
    @Vindicar
    RTFM!
    Адекватно никак по очень простой причине:
    • Боту обычно требуется вечный цикл ожидания-приёма-отправки данных в сеть.
    • Оконному интерфейсу требуется вечный цикл ожидания-обработки оконных сообщений.
    • Эти два вечных цикла нельзя разместить в одном потоке, так как они не знают друг от друге.

    Отсюда вывод: я бы использовал изкоробочный tkinter, чтобы не тащить kivy или pyqt ради этого. Для двух кнопок ткинтер хватит за глаза. Вот только запускать его придётся в отдельном потоке, и ОЧЕНЬ осторожно организовывать взаимодействие между ботом и интерфейсом...
    Ответ написан
    Комментировать
  • Как сделать асинхронное выполнение функций в Python3?

    Vindicar
    @Vindicar
    RTFM!
    inpit() асинхронным сделать можно как показано выше.

    А дальше
    async def sender():
        while True:
            ...
    
    async def getter():
        ...
    
    async def main():
        asyncio.create_task(sender())
        await getter()
    
    asyncio.run(main())
    Ответ написан
    Комментировать