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

    Vindicar
    @Vindicar
    RTFM!
    Зависит от используемой библиотеки. Ты про requests, что ли? Никогда не переводи названия.
    А вообще, как всегда, прочитай документацию. У методов .get()/.post() есть параметр cookies.
    Ответ написан
    4 комментария
  • Почему API возвращает 400?

    Vindicar
    @Vindicar
    RTFM!
    Использование параметра files подразумевает кодирование Multipart-encoded.
    Я подозреваю, нужно использовать параметр data вместо files в обращении к .post().
    Ответ написан
  • Верно ли, что атрибут класса перекрывает атрибут объекта?

    Vindicar
    @Vindicar
    RTFM!
    Возьми и проверь
    >>> class C:
    ...   x = 42
    ...   def __init__(self):
    ...     self.x = 13
    ...
    >>> i = C()
    >>> i.x
    13
    >>> C.x
    42
    >>>


    Что логично - объект сначала ищет атрибуты в своём __dict__, потом в __dict__ класса, потом идёт по предкам класса.
    Ответ написан
    Комментировать
  • Как исправить RuntimeWarning: coroutine was never awaited?

    Vindicar
    @Vindicar
    RTFM!
    self.pushButton.clicked.connect(self.working)
    А ты уверен, что обработчиком нажатия кнопки может быть корутина (async-функция)?
    По-моему, там должна быть обычная функция.
    Ответ написан
    Комментировать
  • Не читает код на пайтон, нет ошибок, но ничего не делает?

    Vindicar
    @Vindicar
    RTFM!
    У вас в def levenshtein(s1, s2): какая-то каша творится с отступами.
    Начиная с word1 = 'blog' код, похоже, должен быть вне функции, а вы его разместили почему-то внутри.
    Ответ написан
    Комментировать
  • Питон выдает 'missing 1 required positional argument: 'self'', что делать?

    Vindicar
    @Vindicar
    RTFM!
    threadBeginCard = Timer(0.1, beginCard, args=None, kwargs=None)

    Я без понятия, что такое Timer(), но могу догадаться, что он делает.
    Он вызывает beginCard() без позиционных (args) или именованных (kwargs) параметров по наступлению некоторого события.
    Проблема в том, что ты вызываешь метод класса, т.е. фактически Class.beginCard(). Ему нужно первым параметром передать экземпляр класса, т.е. self.
    Если бы ты вызывал метод экземпляра, т.е.
    c = Class()
    c.beginCard()
    То тогда self был бы подставлен автоматически.

    Вывод: создать Timer() внутри экземплярного метода, и передать ему self.beginClass в качестве функции. Обрати внимание на отсутствие скобок.

    Правда, я фз что произойдёт дальше - вызов join() мне не очень нравится, так как он заблокирует поток UI до момента завершения рабочего потока.
    Ответ написан
  • Почему одинаковый код выдает разные ответы?

    Vindicar
    @Vindicar
    RTFM!
    Ты пытаешься выполнить сетевые запросы. Время их выполнения зависит от очень многих факторов, в т.ч. от загруженности каналов связи между тобой и сервером, от политики кэширования, и т.д. Так что смотря какой ответ придёт раньше, может получить управление та или иная корутина.
    Ответ написан
    3 комментария
  • Проблема с MongoDB, поможете?

    Vindicar
    @Vindicar
    RTFM!
    Метод update() не подойдет?
    Ответ написан
    Комментировать
  • Как зациклить увеличение числа?

    Vindicar
    @Vindicar
    RTFM!
    Отвечу вопросом на вопрос: а зачем тебе наращивать число каждый час, если можно вместо этого запомнить, когда это число было изменено в последний раз? Тогда, когда число тебе потребуется, просто посчитаешь, сколько часов прошло с тех пор, и сколько должно быть сейчас. Это проще в исполнении и экономнее в плане ресурсов.
    А то цикл по всем пользователям, да ещё и периодически...
    Ответ написан
    Комментировать
  • Как сделать так чтобы в модуле JSON текст сохранялся в виде кириллицы?

    Vindicar
    @Vindicar
    RTFM!
    Как я уже писал в другом твоём вопросе, укажи параметр encoding='utf-8' при открытии файла.
    Ответ написан
    Комментировать
  • Почему не работает семафор?

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

    Vindicar
    @Vindicar
    RTFM!
    asyncio - это, скорее, как обойтись без многопоточности.
    Она хорошо работает для ситуаций, когда большая часть времени потока выполнения уходит на ожидание ввода-вывода - например, на ответ по сети. Если у тебя есть что-то, что занимает CPU, или любая другая операция, выполняемая вне рамок ввода-вывода через asyncio - это остановит выполнение асинхронной программы.
    Если на пальцах, то асинхронная программа состоит из отдельных корутин. Разница с потоками в том, что потоки переключает ОС, а корутины сами отдают управление, когда уходят в ожидание события (грубо говоря, когда делают вызов с await). Это упрощает синхронизацию корутин, так как ты точно знаешь, когда твоя корутина отдаст управление - меньше шансов налететь на состояние гонки из-за внезапного переключения. Опять же, переключение корутин куда более детерминировано, чем переключение потоков, так что "плавающие" баги встречаются реже.
    Тело асинхронной программы - это рабочий цикл (т.н. реактор, он же loop), который проверяет выполняемые операции ввода-вывода, и возобновляет выполнение корутины, когда её операция завершилась. Когда корутина завершится или запланирует ещё одну операцию, она вернёт управление в цикл. Вот почему "задумавшаяся" корутина остановит всю программу.
    Минус в том, что в отличие от многопоточности, нельзя просто вжжжжжжух и сделать код асинхронным. Он должен писаться как асинхронный с самого начала, с прицелом на исполнение в реакторе.
    Ответ написан
    2 комментария
  • Как в функцию передать фильтр, сработавшего хендлера?

    Vindicar
    @Vindicar
    RTFM!
    Ну наверно посмотрить, что доступно в параметре state?
    Ответ написан
    Комментировать
  • Как добавить возможность передавать коду другие файлы и каталоги прямо в командной строке?

    Vindicar
    @Vindicar
    RTFM!
    " Ещё одним возможным улучшением была бы возможность передавать сценарию другие файлы и каталоги прямо в командной строке. Эти имена можно получать из списка sys.argv и добавлять к нашему списку source при помощи метода extend класса list."

    Выделение моё.

    А вообще, sys.argv хранит список параметров командной строки. 0й всегда содержит путь и имя исполняемого скрипта, а вот последующие задаются пользователем.
    В простых случаях можете просто работать с sys.argv как со списком, но если у вас что-то более сложное (типа необязательных аргументов), то смотри в сторону argparse.
    Ответ написан
    Комментировать
  • Ошибка TypeError: sequence item 0: expected str instance, dict found что делать?

    Vindicar
    @Vindicar
    RTFM!
    MyFile = open('C:\HP\proverka.txt', 'w')
    MyFile.writelines(persones)
    MyFile.close()

    writelines() ожидает получить на вход массив СТРОК, а ты даёшь массив словарей. Отсюда и ошибка.
    Зачем ты вообще этот фрагмент написал, если чуть дальше у тебя нормальное сохранение в json?
    Ответ написан
  • Как добавить словарь в файл через модуль pickle?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала я бы посоветовал использовать json вместо pickle. pickle даёт бинарную строку, которая нечитаема человеком. Кроме того, как написано большими красными буквами в доках на pickle, он имеет уязвимости, так что ни в коем случае нельзя передавать через него недоверенные данные.

    В коде много кривых вызовов не по делу.
    ff = open(file_name, 'rb')
    baza = {ff}

    Что сиё должно означать вообще? Ты создал множество из одного элемента - файлового объекта ff. Или ты ожидал, что это магически превратит файл в словарь?
    Как правильно:
    import json 
    #оператор with обеспечит закрытие файла, как только управление покинет тело оператора
    #явное указание кодировки подстрахует от получения "кракозябр" на выходе
    #Кодировка utf-8 позволит использовать символы любых алфавитов.
    with open('Список.txt', 'rt', encoding='utf-8') as ff:
        baza = json.load(ff)

    Далее.
    baza.update({users_name.title():users_numbe})
    Зачем? Почему не написать просто:
    baza[users_name.title()] = users_numbe
    Далее.
    f.close
    Ты взял адрес метода close у объекта f. Ты НЕ вызвал метод close. Чтобы метод вызвать, нужно указать круглые скобки. Впрочем, если используешь with, то он вызовет close() за тебя.
    Так что:
    with open('Список.txt', 'wt', encoding='utf-8') as ff:
        json.dump(
            baza, #что записываем
            ff, #куда
            ensure_ascii=False, #не ASCII-строки пишем как есть, без кодирования
            indent="    ", #сделать отступ, не писать всё в одну строку
            sort_keys=True, #отсортировать ключи по алфавиту
        )

    Остальное примерно так.
    Ответ написан
    Комментировать
  • Как создать напоминание в телеграм боте? Напоминалка каждый месяц?

    Vindicar
    @Vindicar
    RTFM!
    0. Ставишь aiogram и читаешь Quick start, чтобы понять, как в целом будет устроен бот.
    1. Создаёшь и ведёшь базу пользователей бота, например, в sqlite3. Как её наполнять, это уже второй вопрос. Также может потребоваться отдельная таблица напомнинаний, но тебе виднее что за напоминания будут.
    2. В боте создаёшь через asyncio.create_task() бесконечную задачу, которая
    - проверяет время
    - если сейчас подходящее время (скажем, полдень, 1е число месяца, плюс-минус 30 секунд), вызывает корутину уведомления пользователей,
    - засыпает на минуту с помощью await asyncio.sleep() (ни в коем случае не time.sleep()).
    3. Корутина уведомления пользователей должна извлекать из твоей базы уведомления, которые нужно отправить и id пользователей, которым эти уведомления нужно отправить (см. доки по sqlite3 как извлекать данные из БД запросом SELECT). Затем для каждого пользователя она должна отправить текст (см. доки по aiogram) и обработать возможное исключение (например, если пользователь заблокировал бота).
    4. Может потребоваться пара обработчиков команд, чтобы добавлять/менять текст напоминаний.
    Ответ написан
  • Как это реализовать в discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Ну простая же задача, на логику.
    У тебя при вводе команды отрабатывает функция Mishka(), а генерируешь случайный вариант ты вне её, один раз.
    Внеси случайную генерацию внутрь, и будет тебе счастье.
    Ответ написан
  • Как сделать последовательную проверку?

    Vindicar
    @Vindicar
    RTFM!
    Не пиши простыню кода, а разбей задачу на составляющие.
    Для начала отрефактори(переделай) свой код в функцию такого вида:
    def is_guid_accepted(guid: str) -> bool:
        #тут код

    Т.е. функция, которая принимает GUID и возвращает либо True (подтверждён), либо False (не подтверждён). При ошибке можешь выбрасывать исключение, или тоже возвращать False.

    После этого задача упростится.
    1. Прочитать содержимое .xlsx файла, если так уж хочется эксель (а может, всё же csv? будет проще), вытащить из него список GUID'ов и task_id. Гуглится.
    2. Для каждого GUID в списке вызвать функцию выше.
    3. Если функция вернула True, то добавить task_id в список успешных.
    4. Для каждого task_id в списке успешных отправить оповещение. Тебе виднее, как.
    Ответ написан
    1 комментарий