Ответы пользователя по тегу Python
  • YouTube ошибка HTTP Error 429: Too Many Requests. Как исправить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Setaz213, никто вам не скажет сколько нужно ждать. Критерии детектирования недобросовестных пользователей не могут быть публичными, поскольку будучи опубликованными тут же будут использованы с целью настроить скрипты так, чтобы их не блокировали. Читайте в документации ограничения, которые накладывает API. Пользуйтесь прокси-листами, чтобы избежать окончательных блокировок при экспериментах.
    Если пользуетесь API, которым вам пользоваться не положено (то есть нет никакой документации и вообще никаких публичных ограничений), то изучайте с какими частотами дергает это API штатное ПО.
    Ответ написан
    Комментировать
  • Парсинг для чайников?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В институте парсинга информации при российской академии естественных наук (РАЕН) на кафедре текстов входящих сообщений на тертьем кусе есть дисциплина log-файлы. Там с третьей по сельмую лекции рассказывается как сие сделать. В учебном плане 17 семинаров, 8 лабораторных и 3 РГЗ.

    Если серьёзно, то формулировка вашего вопроса показывает, что вы не понимаете чего хотите или не пишете этого в вопросе. В первом случае вам нужно учиться программировать. Просто программировать. На любых курсах, соответствующих вашему уровню. Потом вопрос такой у вас уже не возникнет и все станет само собой понятно.
    Если вариант 2, то... Курсов парсинга log-файлов не бывает. Это тривиально. Вам нужно учиться более простым вещам прежде чем решать такие задачи.
    Ответ написан
    1 комментарий
  • Транслитер, где ошибка?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В срезах. Обе границы среза должны указываться абсолютно, а у вас индекс сбрасывается в 1 каждый раз. Такой изнаночный срез будет возвращать пустую строку.
    "abcdef"[3:2] -> ""
    Ответ написан
    2 комментария
  • Как отобразить автоподсказки при типе typing.List[typing.Union] для любого элемента списка?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы хотите странного.
    А именно, по какой то причине хотите сделать заведомо небезопасный код, и при этом хотите, чтобы IDE вам в этом помогал. Это я к чему: кейс, который вы здесь привели, - это антипаттерн; было бы странно ожидать такую специфическую обработку этой ситуации от IDE.

    В чем, собственно, проблема.
    Метод, который вы вызываете у объекта, не должен зависеть от того, какие данные у вас на входе, иначе ваш код становится небезопасным и при жругом наборе данных возможна ошибка из-за отсутствия вызванного метода.

    Такие вещи нужно в коде разбирать явно.
    К примеру можно явно проверить переменную на принадлежность типу и IDE это учтёт делая подсказку:
    resp = c.response
    if isinstance(resp, A):
        resp.items[0].
    Ответ написан
  • Как автомоаически создавать страницы на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    postebayko, с текущим уровнем подготовки у вас просто не получится.
    Вы не знаете как устроен и работает сайт. И мы не знаем. А вы даже не подумали обмолвиться об этом в своём вопросе. То есть совсем ноль, понимаете?
    Начните с того, чтобы понять как устроен ваш сайт, на чем он написан (фреймворк, архитектура), есть ли на нём публичный API для необходимых вам действий.
    Если да, то вам крупно повезло. Читаете документацию к API и там наверняка будут примеры как делать и какие запросы, чтобы выполнить нужные вам действия. Делайте эти запросы из кода вашего бота.
    Ответ написан
    2 комментария
  • Как сделать, чтобы функция возвращала все элементы?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Потому что выход из функции происходит при первом попавшемся return'е с тем значением, которое первое туда попало.
    Учите матчасть. Читайте внимательно.
    Ответ написан
  • Считывание данных с веб камеры на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Не рассматривали устройства видео-захвата, чтобы подключались вместо монитора?
    Есть для всех интерфейсов: hdmi, dvi, vga.
    Бывают еще KVM устройства, которые подключаются в том числе вместо монитора и шарят с него картинку по ethernet

    Если распознавать нужно лишь несколько полей в области видимости камеры, то я бы посоветовал поискать в инете примеры захвата и обработки фото/видео с камеры с помощью opencv
    Камера на против монитора у вас, наверно будет стоять в оптимальном ракурсе, но даже если нет с помощью opencv вполне можно кадрировать, выровнять перспективу, очистить от бликов и сепарировать нужные участки изображения с камеры.
    Когда останутся поля, тем же opencv можно разбить их на символы и распознавать посимвольно. Хотя наверняка емть большое количество OCR решений в виде готовых 1библиотек.
    Ответ написан
  • Сервер для игры?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    flask, bottle...
    Возьмите любой микрофреймворк.
    Ответ написан
    1 комментарий
  • Python как решить проблему с оплатой?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    При выполнении float и sum - одинаковые значения, но они не равны, почему?

    Потому, что нельзя сравнивать float на строгое равенство без учета погрешности.
    Не каждое даже рациональное число можно представить в виде конечной десятичной или двоичной дроби. К примеру, 1/3 в десятичной - бесконечная периодическая дробь, а в троичной "0.1". Так не каждую конечную по числу знаков десятичную дробь можно представить конечной двоичной дробью. Выходит, что от порядка вычислений зависит потеря очень малых фракций числа, связанных с ограниченной точностью (числом битов) float.
    Нужно выбрать порог точности и сравнивать числа с его помощью:
    EPS = 1e-6
    abs(a - b) < EPS
    Ответ написан
    Комментировать
  • Как оптимизировать работу с файлами в Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы можете писать в CSV, прилично сэкономите на этом. CSV-файлы потом легко и быстро конкатенировать системными средствами командной строки. У вас винда, так что COPY, например.
    Самое неприятное, что может случиться - это проснуться на утро и увидеть монолитный гигантский файл (результат ночного бдения вашего скрипта), в котором что-то пошло не так где-то после первых 30-60%.

    Вообще главное - это вопрос одноразовая ли это задача. Если вы такой объём грузите, скажем, каждые пару дней, то, конечно, нужно юзать мультипроцессинг и настраиваеть нормальный пайплайн с автоматизацией и логами.
    Если речь об однократной кастомной обработке в рамках R&D, то не парьтесь, сделайте как проще.

    Пишите в CSV. Разбейте объём простым слайсом на несколько кусков и тупо стартуйте отдельными скриптами. Это сэкономит вам время на отладку мультипроцессинга, не надо городить очередей, тасков и прочего.

    К вашему коду есть вопросы:
    for row in range(1):
                ws.append(list(sheetname_set))

    Зачем здесь цикл?
    Почему не используете pathlib? Код станет надёжнее и лаконичнее.
    Почему не добавили статистику или просто логирование времени работы разных этапов вашего скрипта? Оптимизировать надо начиная с бутылочного горлышка. После первой бутылки задача может показаться не столь актуальной.

    Если речь об R&D и вы не знаете что дальше будете делать с данными, то объективно полезные вещи можно вытягивать и сохранять в своеобразные мета-файлы для последующей быстрой обработки. Это выгодно, если бутылочное горлышко застряло в экселе. Вытащите за один проход всё что может пригодиться в sqlite или хотя бы простые json-файлы по одному на каждый документ.
    Ответ написан
  • Как понять [:,: 0] в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Дополню немного ответ @sergey-gornostaev
    Это срез, вернее даже два.
    Дело в том, что в питоне объекты могут поддерживать протокол __getitem__, этот метод вызывается когда объект употребляется с квадратными скобками справа. Значение, указанное в квадратных скобках, будет передано в качестве аргумента этому методу.
    Тут есть два нюанса:
    В обычном выражении на питоне запятая означает что результат выражения - это кортеж. То. что вычислилось между запятыми, будет элементами кортежа:
    x=1,2,3
    Второй нюанс заключается в том, что в квадратных скобках питон поддерживает особый такой "синтаксический сахар" называемый срезами (slice).
    Вам действительно лучше почитать про срезы в книге. В общем у среза есть три аргумента и все необязательные. Если аргумента три то срез "под сахаром" выглядит так: 3:10:2 - "с третьего включительно по десятый исключительно с шагом 2".
    Срез 3::2 - означает "с третьего включительно до последнего включительно с шагом 2"
    Шаг можно опустить, по умолчанию он равен 1 и тогда не нужно второе двоеточие. Можно также не указывать и начало среза (типа сначала). Так : означает срез "от начала включительно до конца включительно с шагом 1".
    Такие срезы можно указать через запятую.
    Фактически фрейм - это трёхмерный массив. Первые два измерения - это высота и ширина, третье - это компоненты цвета.
    В вашем примере операцию проводят над всеми пикселями от верха и до низа, по всей ширине но в определённом канале.

    Правда, почитайте книгу. Такие вещи нужно осваивать последовательно, а не наскоком.
    Ответ написан
    2 комментария
  • Как провести конкатенацию в цикле for PYTHON?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1. Форматируйте код с указанием языка программирования.
    2. Аккуртано работайте с отступами, иначе и себя запутаете и всех вокруг и работать будетнекорректно.
    3. Приводите полный код, ччтобы не приходилось гадать что там за пределами ваших обрезков. Где присваивается add_url? Может там пусто вообще всегда было и ничего не теряет.
    4. Читайте, блин, внимательно свой вопрос после написания! Вам что лень перечитать? Вот нам не лень ответить, а вам лень читать? Что за наглое неуважение к сообществу? Какая такая "add_ur"? Где она у вас в коде, блин?!
    5. Используйте форматные строки для сборки таких вещей по шаблону. В них сложнее ошибиться и накосячить.

    Резюмирую. Вы крайне невнимательно понадёргали строчек из кода, повставляли как попало, что-то пропустили, отступы поломали, что-то не увидели и теперь хотите, чтобы мы заварили кофе погуще и гадали что у вас там за пределами ваших примеров вы проглядели.

    Замените
    'http://site.com/' + add_url + '?=' + str(i)
    на
    f'http://site.com/{add_url}?={i}'
    для третьего питона или для второго:
    'http://site.com/{add_url}?={i}'.format(i=i, add_url=add_url)


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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    from itertools import groupby
    print(
        [
            (k, list(l))
            for k, l in
            groupby(
                enumerate(rows),
                key=lambda row: row[1][-1]
            )
        ]
    )
    Ответ написан
    2 комментария
  • Как получить unicode строку из строки hex?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Есть стандартный модуль bas64. В его составе есть функции b16encode и b16decode.
    Это правильный способ закодировать и раскодировать строку в hex и обратно.
    Если у вас это было сделано иначе, то нужно разбираться как было закодировано.
    Поэтому я и спросил откуда берется строка и просил привести пример побольше, чем то, что вы написали.
    Ответ написан
    Комментировать
  • Как правильно вывести текст из генерации?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Приложите голову к монитору и держите минут 30. Буду считывать исходники. Долго, согласен, но у вас мыслительный сигнал какой-то слабый.
    Ответ написан
    1 комментарий
  • Обязательно ли использовать асинхронные функции с asyncio?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вся эта асинхронщина нужна для одной единственной цели - не ждать, пока другие процессы работают.
    Если вы можете обойтись без асинхронного кода и вам не мешают блокировки на время доступа к БД, то зачем вам вообще asyncio и aiohttp? Используйте тогда flask и запускайте gunicorn'ом много одинаковых процессов с вашим приложением и работайте в них синхронно.

    Если вы в асинхронном коде сделаете блокирующий вызов к БД и будете ждать пока она ответит, то вы в этом месте убиваете всё полезное, что даёт вам асинхронщина, но оставляете все неудобства, ведь асинхронный код сложнее синхронного, его труднее писать, труднее отлаживать, труднее тестировать, труднее читать.
    Ответ написан
    Комментировать
  • Как доставать id чата из id беседы с помощью регулярки?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Жесть.
    int('2000000179'[1:])
    int('2000000003') - 2000000000

    Решил вырезать другу аппендицит. Слышал, что он растёт внизу живота. Скажите, его можно достать через задницу, если нет, то куда тыкать ножиком?
    Ответ написан
    1 комментарий
  • Как отсортировать словарь по значению?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    {
        key: value 
        for _, key, value in 
        sorted(
            (-int(v), k, v)
            for k, v in
            workers.items()
        )
    }
    Ответ написан
    Комментировать
  • В чем разница между 'AND' и '&'?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    разница в том, что `and` - это логическая операция, её нельзя перекрыть, то есть нельзя у объекта реализовать метод, который будет реализовывать свой алгоритм вычисления результата операции.
    Связано это со стандартными оптимизациями логических выражений, которые (оптимизации) есть почти во всех языках.
    Грубо говоря операция `and` (конъюнкция) принимает два аргумента (слева и справа) и возвращает значение первого попавшегося ложного или последнего истинного, если все истины.
    Например:
    'one' and 0  # вернёт 0
    '' and 13  # вернёт ''
    3 and 5  # вернёт 5

    Дезъюнкция (or) работает похожим образом, но возвращает первый попавшийся истинный рагумент, или последний ложный, если ложны оба:
    3 or 5  # вернёт 3
    '' or 'hello'  # вернёт 'hello'
    None or 0 # вернёт 0

    При этом, если возвращается первый попавшийся подходящий аргумент, второй вообще вычисляться не будет. Там может быть целое выражение с вызовом функций, но вычисляться оно не будет, поскольку это значение не нужно. На самом деле это очень удобно и позволяет лаконично записывать многие вещи.

    Операции & | по своему принципу работы ничем не отличаются от сложения, вычитания, умножения, деления, проверки на равенство и неравенство и многих других операций. Все эти операции могут быть перекрыты. То есть написав такой класс:
    Class MyClass:
        def __and__(self, right_argument):
            result = 'что угодно'
            print(f'Фигасе: {self} & {right_argument} -> {result}')
            return result
    
    a = MyClass()
    b = MyClass()
    print('Вот так вот:\n', a & b)

    Фигасе: <__main__.MyClass object at 0x7f3df1aeb588> & <__main__.MyClass object at 0x7f3df1aeb438> -> что угодно
    Вот так вот:
     что угодно


    pandas использует перекрытие, чтобы, фактически, сформировать функцию, которая будет применяться потом к большому количеству аргументов по очереди. Само собой логические операции для этого не годятся.

    Я просто уверен, что автор вопроса не поймёт до конца то, что я тут объяснял, но, возможно, кому-то пригодится.

    Удручает, что люди не хотят учиться, а хотят сразу быть готовыми программистами и писать в прод.
    Ответ написан
    6 комментариев
  • Как искать несколько слов в предложении?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Похоже ботов кинулись писать даже те, кто вообще программировать не умеет. Надеюсь эта волна не докатится до медицины.

    Напишите свою функцию, куда передайте текст и набор слов, а внутри по циклу ищите каждое пока не найдёте первое попавшееся.
    Ответ написан
    Комментировать