• Как сделать запрос к двум таблицам SQL?

    Vindicar
    @Vindicar
    RTFM!
    Каждое место резервируется на одну дату, не на интервал? Тогда сравнительно просто.
    Делаешь LEFT JOIN, слева - таблица мест, справа таблица резервов, соединяешь по совпадению id места И совпадению даты резерва с назначенной.
    Тогда те места, у которых на назначенную дату нет резерва, будут иметь в соответствующих столбцах (типа id юзера) NULL. Тогда если поставить WHERE id юзера IS NULL, останутся только места, свободные на эту дату.
    Ну а выбор случайного как обычно: ставишь ORDER BY RANDOM() LIMIT 1

    Я бы так к этому подошёл, во всяком случае. Может, есть способ лучше.
    Ответ написан
    4 комментария
  • Как спарсить номер телефона если блок закрыт?

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

    Vindicar
    @Vindicar
    RTFM!
    А ещё лучше - освой модуль csv, он простой и удобный.
    Ответ написан
    Комментировать
  • Как правильно отобразить окна на разных экранах?

    Vindicar
    @Vindicar
    RTFM!
    Гуглить пробовал?
    Первая же ссылка выводит на пакет screeninfo.
    Его пробовал использовать?
    Ответ написан
  • Как обновлять изображение OpenCV Python?

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

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

    Vindicar
    @Vindicar
    RTFM!
    У UserRole должен быть не обычный ключ - автоинкремент, а составной ключ user_id:role_id.
    Тогда БД гарантирует, что в таблице UserRole будет не более одной записи для одной пары юзер-роль.
    Создание такой записи будет означать, что у юзера есть роль, удаление - что у юзера роли нет.
    Тогда и запросы будут тривиальными: для выдачи роли INSERT OR IGNORE, для снятия роли - DELETE FROM.

    Единственно что, сначала добавляй пользователя и роль (если её нет), потом уже отношение.

    Вообще я посоветую почитать документацию на отношения вида Many-To-Many.
    Ответ написан
  • Как удалить последнюю запятую в списке?

    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 комментарий
  • Где можно купить физический механизм которым можно будет управлять програмно?

    Vindicar
    @Vindicar
    RTFM!
    Тебе нужно с телефона управлять ИК-пультом?
    Покупаешь тривиальный адаптер 3,5 мм аудио <-> ИК.
    Под андроид есть приложения, которые умеют работать с такими адаптерами, в том числе записывать сигнал существующего пульта и воспроизводить его.
    Если что, что-то аналогичное можно сделать и на ПК. С точки зрения ОС это будет просто работа со звуком - запись с определённого микрофона и воспроизведение на определённый динамик.
    Ответ написан
    Комментировать
  • Как вытащить все белые объекты и измерить их белизну 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 даёт для скачиваемого ресурса "как бы файл", который можно напрямую скормить в библиотеку для телеграмма. Тогда не придётся возиться со временными файлами, будет чуток проще.
    Готовый код не проси.
    Ответ написан
    Комментировать