• Как работать с календарём в Python?

    Vindicar
    @Vindicar
    RTFM!
    Как правильно посоветовали в комментариях, разбей задачу на меньшие.
    1. Как получить данные с сайта университета? Смотри в сторону пакета requests.
    Также тебе потребуется понять, как сам сайт выкладывает эти данные. Просто сохрани скачанную страницу в файл и посмотри, есть ли внутри данные, которые тебе нужны. Вообще советую сохзранять страницу в файл при любой ошибке, чтобы понять, не послал ли тебя сервер на крайний север. =)

    Если данные записаны прямо в страницу, можешь использовать, скажем, BeautifulSoup, чтобы выцарапать их из HTML разметки.
    Если же данных в странице нет, значит, сайт делает отдельный XHR запрос для подгрузки данных. Открой страницу расписания, и на этой вкладке открой панель разработчика в бразуере (обычно F12), а затем обнови страницу. Посмотри на запросы (там может быть фильтр по XHR, используй его) и найди тот, который подгружает что-то, похожее на нужные данные.
    Тут могут быть два варианта: подгружается HTML разметка - тогда снова смотри в сторону BeautifulSoup. Или подгружается JSON - тогда используй встроенный в питон модуль json.
    2. Так или иначе, ты должен будешь построить структуру данных, которая хранит требуемую тебе инфу. Например, список из словарей, где каждый словарь описывает одну пару. Структуру строй так, чтобы тебе с ней было удобно работать. Анализируя полученные в п. 1 данные, заполни эту структуру.
    3. Выбери, с каким календарём ты всё-таки работаешь, и погугли, есть ли у него API. Привыкай искать и читать оригинальную документацию! Чатгпт и прочее может врать или ссылаться на устаревшие сведения.
    Скорее всего API будет сводиться к HTTP запросам, которые можно будет выполнить с помощью всё того же requests.
    Ответ написан
  • Как в tk.Label отобразить содержимое двух списков один над другим?

    Vindicar
    @Vindicar
    RTFM!
    Т.е. тебе нужно конкатенировать списки, а потом преобразовать?
    Простой способ будет:
    all_lists_together = sum(lists, [])  # склеиваем списки в один, по порядку
    all_lists_as_string = '\n'.join(all_lists_together)  # а дальше обрабатываем этот список
    Ответ написан
    1 комментарий
  • Почему не удается установить веб сокет соединение через телефон?

    Vindicar
    @Vindicar
    RTFM!
    ws://127.0.0.1:8000/
    Как по-твоему, что означает адрес 127.0.0.1?
    Ответ написан
    Комментировать
  • Я учу питон, и в данный момент я пытаюсь сделать калькулятор который проверяет данные которые вводит пользователь?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, не надо называть переменные и функции одинаково (num_1 и num_1, num_2 и num_2).
    Во-вторых, переменные, созданные внутри функции, обычно не видны снаружи. Ты правильно пытаешься использовать оператор return, чтобы вернуть значение из функции. Но ты не учёл, что когда функцию вызываешь, результат лучше сохранить в переменную, и потом использовать её.

    number_1 = num_1()
    number_2 = num_2()
    # дальше работаешь с number_1 и number_2
    Ответ написан
    6 комментариев
  • Можно ли на время определенное время перевести пк в спящий режим а потом включить с использованием python?

    Vindicar
    @Vindicar
    RTFM!
    Можно без питона. Посмотри в сторону Планировщика задач в винде, например. Планируешь выполнение утилиты shutdown чтобы отключить комп, а чтобы разбудить - планируешь запуск любой проги и ставишь галку ""Включить компьютер для этой задачи".

    Какой эквивалент для пробуждения в никсах - не знаю, увы. А вот shutdown есть и там.
    Ответ написан
  • Почему я получаю пустую строку?

    Vindicar
    @Vindicar
    RTFM!
    send_length += b' ' * (HEADER - len(send_length))
    Я не вполне понял, но зачем ты сразу после длины сообщения дописываешь пробелы?
    Да ещё с ориентировкой на длину строкового представления длины сообщения?
    Не говоря уже о том, что ты фиксируешь длину сообщения в символах, а передаёшь сообщение в байтах в некоторой кодировке... а ведь есть многобайтовые кодировки, типа utf-8. Там эти длины не будут совпадать, и более того, две строки одной длины в символах могут иметь разную длину в байтах, и наоборот.
    Ну и до кучи, ты передаёшь длину сообщения как строку. А как ты определишь длину этой строки?
    Ответ написан
    Комментировать
  • Почему у меня ошибка и как его пофиксиать?

    Vindicar
    @Vindicar
    RTFM!
    Amur_emk,
    1. Проверь, что файл Computer.PNG находится именно в "Новая папка (2)".
    2. Попробуй указать полный путь, например, так:
    from pathlib import Path
    from sys import argv
    
    SCRIPT_DIR = Path(sys.argv[0]).parent.resolve()  # путь к папке скрипта
    path = str(SCRIPT_DIR / 'Computer.PNG')  # путь к файлу в этой папке
    # далее по тексту твоей программы

    Но есть ещё одна проблема. Под капотом там, походу, используется пакет pyscreeze, который, в свою очередь, использует opencv (пакет opencv-python, модуль cv2). А у opencv исторически проблемы с кириллическими путями.
    Так что, возможно, придётся самостоятельно грузить картинку, например, так.
    from pathlib import Path
    from sys import argv
    import numpy
    import cv2
    
    SCRIPT_DIR = Path(sys.argv[0]).parent.resolve()  # путь к папке скрипта
    path = str(SCRIPT_DIR / 'Computer.PNG')  # путь к файлу в этой папке
    
    file_data = numpy.fromfile(path, numpy.uint8)  # содержимое файла "как есть"
    image = cv2.imdecode(file_data, cv2.IMREAD_COLOR)  # декодированное содержимое (картинка)
    button = pyautogui.locateOnScreen(image)  # передаём сразу картинку
    pyautogui.click(button)
    Ответ написан
    2 комментария
  • Переменные на кирилице?

    Vindicar
    @Vindicar
    RTFM!
    Позволяет. Использовать эту возможность не советую, и в придачу к приведённым выше причинам добавлю ещё одну, очень простую: ключевые слова и вся стандартная библиотека языка на латинице. Задолбаешься переключать раскладку.
    Ответ написан
    Комментировать
  • Как исправить TypeError: string indices must be integers, not 'str'?

    Vindicar
    @Vindicar
    RTFM!
    1. Прочитать ошибку
    Индексы строки должны быть числами. Ошибка указывает на account['name'].

    2. Осознать ошибку
    Ты ожидаешь, что в account лежит словарь или что-то похожее, а там строка!

    3. Проследить ошибку
    account приходит из for account in accounts. Значит, accounts либо является коллекцией строк, либо является словарём с ключами строками. Надо проверить, что приходит в accounts, либо с помощью пошагового прохода программы, либо с помощью отладочного print().

    4. Исправить ошибку
    Ну это ты уж самостоятельно. Я не знаю, что именно ты ожидаешь от users.find_one().
    Ответ написан
    Комментировать
  • Асинхронные функции и цикл событий. RuntimeWarning: coroutine 'Application.initialize' was never awaited?

    Vindicar
    @Vindicar
    RTFM!
    :0: RuntimeWarning: coroutine 'Application.shutdown' was never awaited
    :0: RuntimeWarning: coroutine 'Application.initialize' was never awaited

    Ты вызываешь указанные функции как обычные (Application.initialize()), а это корутины. Их так вызывать бесполезно. Если ты их вызываешь внутри другой корутины (async def функции), то можешь исправить вызов на await Application.initialize(). Если же ты пытаешься вызвать их из обычной функции (просто def), то все становится куда сложнее...
    Ответ написан
    Комментировать
  • Как воспроизводить код при закрытии приложения?

    Vindicar
    @Vindicar
    RTFM!
    Оставаясь внутри одного процесса - никак. Условно, вызов TerminateProcess() пришибёт целевой процесс без шанса на реакцию, как и некоторые другие ситуации. Ты можешь использовать atexit, как указали выше, но работать с сетью внутри него не получится. Работа с сетью вообще долгая штука.
    Так что единственный вариант - запускать фоновый процесс-мониторилку, корректно отвязав его от основного процесса (чтобы не завершились вместе). Ну и иметь ввиду, что его тоже можно прибить, так что его надо перезапускать совместно. Тогда прибить оба процесса сразу будет труднее, хотя всё ещё возможно.
    Ответ написан
    Комментировать
  • Как в python использовать функции async внутри multiprocessing.Pool?

    Vindicar
    @Vindicar
    RTFM!
    Я очень надеюсь, что у тебя асинхронщина занимается получением данных, а multiprocessing - обработкой. В этом случае тебе не корутины по процессам надо раскидывать, а создавать внутри одной корутины синхронные задачи по обработке. А асинхронке оставить вопросы получение исходных данных/отправки результатов. Так куда практичнее. run_in_executor() в помощь.
    Ответ написан
    Комментировать
  • Какой подход используется для выявления различных отклонений на экг?

    Vindicar
    @Vindicar
    RTFM!
    Средства анализа временных рядов? Необязательно нейронки.
    Из нейронок есть рекуррентные сети, к примеру. В любом случае комп зрение тут нужно только чтобы перевести рисунок ЭКГ в величины напряжений, если это ещё не сделано.
    Альтернативно - Фурье анализ по каждому каналу ЭКГ, и тренируешь обычную нейронку, подавая ей на вход конкатенацию полученных спектрограмм.
    Ответ написан
    Комментировать
  • Как передать большой файл по ssh без промежуточного хранения?

    Vindicar
    @Vindicar
    RTFM!
    А как насчёт scp -C? Там, правда, gzip-сжатие.
    Ответ написан
    1 комментарий
  • Как изменить текст в консоли питона?

    Vindicar
    @Vindicar
    RTFM!
    По пунктам:
    1. со стандартным input() такое не прокатит, придётся писать свой или искать сторонние либы.
    2. Если редактировать надо только последнюю строку: вывод символа \r переведёт курсор в начало строки, а \x08 - на один символ влево. Главное, не забудь предотвратить вывод перевода строки, пока не будешь готов. Редактировать предыдущие строки так нельзя.
    3. curses позволяет делать ОЧЕНЬ много, вплоть до отдельных окон в одной консоли, но под виндой из коробки не работает. Вроде был пакет windows_curses, который добавляет поддержку виндового терминала.
    Ответ написан
    1 комментарий
  • Почему не работает apscheduler?

    Vindicar
    @Vindicar
    RTFM!
    Так как ты не показал инициализацию scheduler, то спрошу: scheduler.start() не забыл вовремя вызвать?
    Также есть совет увеличить детализацию логов для скедулера.
    Ответ написан
    Комментировать
  • Хочу сделать проверку: есть ли канал на сервере или нет в функции для добавления его в БД?

    Vindicar
    @Vindicar
    RTFM!
    Если бот находится на этом сервере, то просто запрашиваешь канал через bot.get_channel() и потому уже проверяешь channel.guild.id на полученном канале.
    Если бота на сервере нет, то я без понятия, возможно ли получить информацию о сервере. Я бы предположил что нет.
    Ответ написан
  • Почему Python выдает ошибку в строке с newPosition?

    Vindicar
    @Vindicar
    RTFM!
    А какого баклажана ты пишешь несколько команд в одну строку? Не надо так делать.
    Ответ написан
  • Как заставить бота регулярно отправлять сообщения на канал в определённое время?

    Vindicar
    @Vindicar
    RTFM!
    Почитать про asyncio.create_task() и как им пользоваться.
    Создаёшь таск при старте бота (читаем доки на диснейк как реагировать на старт бота), в таске крутишь while True: в комбинации с asyncio.sleep(), пока не наступит нужный момент. Затем делаешь что нужно, и снова ждёшь.
    Оговорка 1

    1. Сохрани результат create_task() в переменную (глобальную или атрибут класса бота, если у тебя класс). Иначе со временем сборщик мусора соберёт объект задачи и задача прибьётся.
    2. Перед запуском фоновой задачи проверяй, а не запущена ли она уже. Вроде как on_startup() может вызываться неоднократно при некоторых обстоятельствах.
    3. При выходе из бота берешь этот объект задачи и делаешь что-то типа
    my_bg_task.cancel()
    try:
        await my_bg_task
    except asyncio.CancelledError:
        pass

    чтобы дать фоновой задаче спокойно завершиться.

    Оговорка 2

    Если у тебя только одна задача с ожиданием, то можно ждать самому, через asyncio.sleep(). В противном случае может пригодиться aioschedule или подобная библиотека. Тогда в фоновой задаче крутишь рабочий цикл этой библиотеки, а свои задачи планируешь уже через неё.
    Ответ написан
    1 комментарий
  • Как завершать программу анимированной гифкой?

    Vindicar
    @Vindicar
    RTFM!
    У тебя в коде полно вызовов third_window.grab_set(), хотя а) никакого третьего окна ты не показал и б) даже в коде, который относится к дургим окнам. Копипаст подвел, или так задумано?
    Ответ написан