• Ошибка в pip при установке logging?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    logging стандартная библиотека, зачем ее устанавливать через pip
    Ответ написан
    6 комментариев
  • Как вызвать переменную с типом данных string?

    ScriptKiddo
    @ScriptKiddo
    Вам нужно получить функцию по имени

    import sys
    
    this_module = sys.modules[__name__]
    
    
    def square(x):
        return x * x
    
    
    print(getattr(this_module, 'square')(10))


    OUT


    Foo
    
    Process finished with exit code 0


    Source: https://stackoverflow.com/a/2933481

    Либо делать вот так

    def square(x):
        return x * x
    
    
    functions = {
        'square': square
    }
    
    print(functions['square'](10))


    OUT

    100
    
    Process finished with exit code 0

    Ответ написан
    2 комментария
  • В git закоммитил в master - как исправить?

    bingo347
    @bingo347
    Crazy on performance...
    # переименуем master в experiment
    git checkout master
    git branch -m experiment
    # удалим удаленный master
    git push --delete origin master
    # зальем текущую ветку на удаленный репо:
    git push -u origin experiment
    # переключимся на комит с которого пойдет мастер по его хэшу:
    git checkout 3624ce5
    # ответвимся от сюда в новую ветку с именем master
    git checkout -b master
    # и залем ее на удаленный репо
    git push -u origin master
    Ответ написан
    4 комментария
  • Python как перебрать значение по ключу в список?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вот так, например.

    from itertools import groupby
    
    [
        dict(
            name=name, 
            id=id, 
            pos=[subitem['pos'] for subitem in subitems]
        ) 
        for (name, id), subitems in 
        groupby(
            dic, 
            lambda item: (item['name'], item['id'])
        )
    ]

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

    Не забудьте предварительную сортировку, если группируемые элементы могут быть не рядом.
    Ответ написан
    Комментировать
  • Реально ли работать на питоне не понимая сути декораторов?

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

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

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

    И нет, на декораторах свет клином не сошелся. Нужно понимать что в питоне функция - это объект первого рода и что это значит.
    Нужно понимать, что такое "замыкание" в контексте функционального программирования.
    Более того, нужно понимать что такое дескрипторы, как работают мета-классы и много-много всего такого.

    Нет, с этими знаниями не рождаются, их нужно осваивать.

    Декораторы - это очень простая концепция.
    Декоратор - это функция, которая принимает в качестве единственного аргумента какую-то функцию. Декоратор что-то делает с этой функцией (где-то регистрирует ее, документирует, оборачивает её вызов в другую функию) и возвращает её изменённую или другую функцию-обёртку.

    Что конкретно вам не понятно?

    Надо заметить, что Декоратор как паттерн проектирования имеет боле еширокий смысл. Декорировать можно объекты, классы, функции, даже модули (постольку, поскольку это тоже объекты). Учиться вам надо, сударь, и не ожидать, что всё прошьётся в мозг мгновенно. Быть программистом - это всегда учиться. Не останавливаясь.

    Примеров декораторов огромное множество: самые простые и понятные - это:
    - замер времени выполнения функции
    - кэширование результата
    - подстановка части аргументов (partial)
    Ответ написан
    4 комментария
  • Какие есть курсы\книги по Python для ребенка 10лет?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    Он сам смышленый, но боюсь что книги для "больших дядей" могут быть слишком сложными для него.

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

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

    Ведь 10 лет это еще математика 3-4 класса, для него будет в принципе открытием работа с массивами, списками, кортежами, понимание как работает http, банально понимание байтов, битов, кодировка, стек - вот это все.
    Сейчас главное не книги ддя детей, а его мотивация что-либо делать и доводить до конца, чтобы он видел результаты своих попыток.
    Будьте с ним чаще. Интересуйтесь и радуйтесь достижениям. Подсказывайте какие-то вещи.
    А главное научите пользоваться поиском, правильными ресурсами и нетэтикету
    Ответ написан
    Комментировать
  • Почему не работает ChromeDriver при выполнении python кода?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Могут и не точно совпадать, достаточно первых трёх цифр билда (83.0.4103). Обновите версию десктопного браузера, какая будет в итоге установлена, такой драйвер и загружайте.
    Ответ написан
    5 комментариев
  • Нужно получить ссылку сайта после запроса, но как?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Если запрос не сильно сложный, то можно так:
    F12 в браузере -> network
    Нажимаем кнопку на сайте, смотрим на первый запрос в списке и что он вернул. Если вернул html, из него можно распарить ссылку новую. Если редирект, то нужно брать новую ссылку из хедера Location.

    Если запрос сложный, допустим нужна авторизация, или там через js сложно сделано, то можно использовать Selenium. Там все просто. Чтобы браузер не мозолил глаза, можно задать настройку headless.

    Это в общих чертах. Если никто не сделает до завтра, то могу помочь утром.

    UPD:
    import requests
    import time
    import json
    import re
    
    
    
    BASE_URL = 'https://rezka.ag/ajax/get_cdn_series/?t={}'
    
    
    
    def parse_quality(urls, quality=None):
    
        splited = urls.split(',')
    
        if not quality:
            using_quality = splited[-1].split('http')[0]
            print('Используем максимально доступное качество ({})'.format(using_quality))
            return splited[-1].split(' or')[0].replace(using_quality, '')
    
        intext_quality = '[{}p]'.format(quality)
    
        if intext_quality not in urls:
            print('Качества {} нет в списке доступных'.format(quality))
            
            # тут уже я не выдержал и импортировал регекс
            available_qualities = re.findall(r'\[(.+?)\]', urls)
            print('Доступные варианты: ', ', '.join(available_qualities))
            return None
    
        for url in splited:
            if intext_quality in url:
                return url.split(' or')[0].replace(intext_quality, '')
    
    
    def get_urls(film_id, season, episode):
    
        payload = {'id': film_id, 'translator_id': '1', 'season': season, 'episode': episode, 'action': 'get_stream'}
    
        r = requests.post(BASE_URL.format(str(int(time.time()))), data=payload)
    
        if r.status_code != 200:
            # тут нужно будет как нибудь обработать ошибку, если запрос не прошел
            print('Ошибка')
            return
    
        data = json.loads(r.text)
    
        if data.get('success') != True:
            # тут нужно будет как нибудь обработать ошибку, если запрос не прошел
            print('Ошибка')
            print(data)
            return
    
        return data['url']
    
    
    
    if __name__ == '__main__':
        
        all_urls = get_urls(9364, 1, 1)
    
        if all_urls:
            url = parse_quality(all_urls)
    
            print(url)


    Параметры для get_urls:
    ID фильма, можно взять по ссылке в браузере
    Сезон, эпизод - тут все понятно

    Параметры для parse_quality:
    список ссылок с качеством
    желаемое качество. Например, parse_quality(all_urls, 1080)

    Если качество задано, то вернет ссылку на него, если не найдет - ошибка
    Если качество не задано, то вернет максимальное доступное

    ps:
    если весь запустить код сверху, то он вернет 1080p, но в ссылке явно будет указано 720p. В этом ошибки нет, сайт так помечает 1080p, похоже, нет там 1080 честного)

    Сырой ответ с ссылками, если интересно

    [360p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/240.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/65af9f4fab0d894043fac8887b7da99e:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/240.mp4,[480p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/360.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/ea218fab2e907aa2093c5bc7f9cb480d:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/360.mp4,[720p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/480.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/92bdeccddc5661b6b786659fae6adc3b:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/480.mp4,[1080p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/720.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/d2bb808ccb6910d8317224825ee2875d:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/720.mp4

    Ответ написан
    Комментировать
  • Как понять, откуда берется переменная в post запросе?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Перейди во вкладку Initiator и смотри какие JS функции отрабатывают как для самого метода login, так и перед ним. Вероятнее всего в какой то момент сервер передает на клиент ключ, который используются для логина, но при этом нигде не сохраняется.
    Ответ написан
    Комментировать
  • Как сделать выдачу для группы?

    longpoll.listen() получает одно событие за итерацию и не приступает к следующему, пока не закончит с текущим. Если событие было получено пока выполнение предыдущего не завершилось, оно не будет выполнено.
    Когда от пользователя было получено "тм1", условие
    elif response == 'тм1':
    стало истинным и начал выполняться соответствующий блок кода. Так как весь блок не выполнился и не было получено следующее событие, условие
    if response == 'сегодня':
    ложно, соответственно, блок кода, следующий за ним, не будет выполнен.
    Чтобы этого избежать, необходимо поместить условие за пределами elif response == 'тм1'. В таком случае, чтобы выполнение блока кода происходило только когда последовательно придёт сначала "тм1", а затем "сегодня", можно добавить переменную типа bool, которая по умолчанию ложна, а при вводе "тм1" истинна.
    group = False
    elif response == 'тм1':
        group = True
    
    elif response == 'сегодня' and group:
        ...
    Ответ написан
    3 комментария
  • Можно ли несколько подряд стоящих одинаковых букв, заменить на одну?

    0xD34F
    @0xD34F
    re.sub(r'(.)\1+', r'\1', name)
    Ответ написан
    Комментировать
  • Есть ли Вконтакте актуальные IT сообщества?

    opium
    @opium
    Просто люблю качественно работать
    Нет конечно, ВК никак не подходит для лонгпостов, а аналог телеграфа сделали слишком поздно
    Ответ написан
    Комментировать
  • Почему код в панели разработчиков Chrome отличается от кода, когда нажимаешь page source?

    @galaxy
    Потому что в панели на вкладке Elements не код, DOM-структура страницы, уже после того как отработали все скрипты.
    Даже если нет ни одного скрипта, форматирование и особенности отображения могут отличаться от исходника страницы.
    Ответ написан
    Комментировать
  • Как просуммировать элементы строк в питоне?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    >>> sum([x[0] for x in arrays])
    34.33750876274861
    >>> sum([x[1] for x in arrays])
    19.305019168249604
    >>> sum([x[2] for x in arrays])
    32.17848566247153
    >>> sum([x[3] for x in arrays])
    22.424106744929986
    ...

    где arrays - массив с вашими строками
    import json
    data = '''
    [-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 15.626869483055735, 0.0]
    [0.0, 19.305019168249604, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 22.424106744929986, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 24.802126691039216, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.41793956879349]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 32.17848566247153, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [34.33750876274861, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 38.54533200463435, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 40.605066388577725, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    '''
    arrays = [json.loads(x) for x in data.split('\n') if x]
    Ответ написан
    1 комментарий
  • Что считается уровнем Advanced? И в каких "вещах" должен разбираться специаист, чтобы считаться сциалистом высокого уровня?

    @deliro
    Чтобы выгодно отличаться от javascript-разработчиков, нужно быть не только javascript-разработчиком, но и разработчиком.

    Это единственное и самое важное.
    Ответ написан
    2 комментария
  • Как обойти защиту от парсинга с помощью Python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    1) Делайте задержку перед каждым запросом.
    2) Накидайте расширений(тот же adblock) в профиль selenium. Походите по нескольким страницам в selenium вручную.
    Ответ написан
    1 комментарий
  • Классы и ООП: зачем, а главное - когда использовать, а когда нет?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Все эти классы, фабрики, абстракции и прочие умные слова нужны для того, чтобы программист мог управлять сложностью создаваемой им программы. Наше сознание хранит в среднем 7 различных сущностей, так что разрезав задачу на законченные куски - объекты, мы даем себе и коллегам возможность уменьшить количество сущностей, которые нужно держать в голове.

    Далее, программа, порезанная на части, допускает замену одних частей на другие. Это дает возможность разрабатывать программу, постепенно наращивая сложность и заменяя ненаписанные еще куски затычками, тестировать ее, заменяя сложную реализацию чего-то предсказуемой затычкой и переносить готовые куски кода с место не место, без переписывания заново всей программы в случае небольшого изменения логики.

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

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Да, работа с JSON файлами.
    Ответ написан
    1 комментарий
  • Как будет выглядеть этот код на Python?

    HemulGM
    @HemulGM Куратор тега Python
    Delphi Developer, сис. админ
    Перепиши и узнаешь
    Ответ написан
    2 комментария