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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Звук в этом формате - бинарные данные. Нельзя с ними работать как с текстом.
    Вы же открываете файл в текстовом режиме. Не надо так. Открывайте в бинарном, не декодируйте. Отправляйте как байты. Принимайте тоже как байты.
    К примеру символы абзацев могут быть проинтерпретированы неправильно и заменены, от этого съедут куски данных, сломается выравнивание.
    Я не понял. вы на сокетах имитируете часть http-проткокола. Зачем? Отправляйте либо с сокета на сокет в чистом виде, либо поднимите тривиальный сервер на flask и овспользуйтесь requests, чтобы не изобретать дендро-фекальный велосипед.
    Ответ написан
    Комментировать
  • Как создать сайт, чтобы в нем можно было программировать на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Воспользуйтесь готовым.
    А свой сделать - очень нетривиальная задача. Основная проблема в изоляции и совместимости.
    Вам нужно с одной стороны заблокировать все возможности выбраться из "песочницы" и навредить машине, в которой запущен интерпретатор или предотвратить попытки некотролируемой рассылки спама и порнухи с ваших серверов.
    С другой стороны после блокировки всего опасного вам нужно сохранить возможность запускать безвредные программы так, чтобы их не приходилось допиливать под ваш урезанный под песочницу питон.
    Обе задачи нетривиальны, нужно вникать в особенности внутренней кухни интерпретатора, в детали стандартной библиотеки и особенности операционной системы.

    1. Гуглите "python sandbox".
    2. Конкретизируйте задачу. Какой код вы хотитезапускать, хотите ли подключать сторонние библиотеки, а бинарные библиотеки?
    Ответ написан
    3 комментария
  • Как решить проблему с условием вывода и регулярными выражениями в Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1)
    Попытки убрать блок else, либо заменить "Нет вхождения" на pass или None - выдают ошибку.

    a if q else b - это тернарный оператор. У него три аргумента (a, b, q) и результатом будет a или b в зависимости от истинности q.
    pass там по синтаксису не подойдёт, поскольку это не значение, а ключевое слово.
    Вам нужно вычислить выражение и результатом должно быть что-то что можно передать в print(). Если по else вы укажете пустую строку "", то print её напечатает. Не знаю устроит ли вас пустой абзац в консоли. Если нет, то смотрите решение, предложенное выше.

    2) в предыдущем решении вы могли не заметить, но регекспы соединены через "|". Это сработает не для всех регекспов. Нужно быть осторожнее с такой конкатенацией. Вообще с регекспами надо поосторожнее. В большой силе большая ответственность.
    Можно сделать цикл и поискать каждый регексп по отдельности. Так вам проще сохранить контроль над тем, что именно вы нашли и как на это реагировать.
    Ответ написан
    1 комментарий
  • Как посчитать суммы в списке словарей?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вот решение попроще.
    from collections import Counter
    a = [{'id': '1', 'qty': 6}, {'id': '2', 'qty': 1}, {'id': '1', 'qty': 1}, {'id': '2', 'qty': 1}, {'id': '3', 'qty': 10}, {'id': '1', 'qty': 1}]
    c = sum((Counter({d['id']: d['qty']}) for d in a), Counter())
    result = [dict(id=k, qty=v) for k, v in c.items()]

    UPD: Дополнил решение, чтобы строго соответствовать формату результата.
    Ответ написан
    24 комментария
  • Как проложить путь в Python 3.8.2 к C:\Users\"ИМЯ ПОЛЬЗОВАТЕЛЯ"\Documents?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    import os
    os.path.expanduser('~/my/path/from/home')

    Но лучше использовать pathlib
    from pathlib import Path
    p = Path('~/my/folder').expanduser()  # PosixPath('/home/svp/my/folder')

    У вас, конечно, будет не posix
    from pathlib import Path
    p = Path('~/Documents/Rockstar Games/GTA V/User Music/gta.mp3').expanduser()
    Ответ написан
  • Пример, "filters": ["filter_dep","throttle"]. Может ли один handler (или один logger) использовать несколько фильтров?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Технически оба класса: Logger и Handler являются потомками Filterer.
    Загляните в исходники.

    class Filterer(object):
        """
        A base class for loggers and handlers which allows them to share
        common code.
        """
        def __init__(self):
            """
            Initialize the list of filters to be an empty list.
            """
            self.filters = []
    
        def addFilter(self, filter):
            """
            Add the specified filter to this handler.
            """
            if not (filter in self.filters):
                self.filters.append(filter)
    # ...


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

    def filter(self, record):
            """
            Determine if a record is loggable by consulting all the filters.
    
            The default is to allow the record to be logged; any filter can veto
            this and the record is then dropped. Returns a zero value if a record
            is to be dropped, else non-zero.
    
            .. versionchanged:: 3.2
    
               Allow filters to be just callables.
            """
            rv = True
            for f in self.filters:
                if hasattr(f, 'filter'):
                    result = f.filter(record)
                else:
                    result = f(record) # assume callable - will raise if not
                if not result:
                    rv = False
                    break
            return rv

    То есть фильтры работают через логическое "И".
    Ну и да, может.
    Ответ написан
    Комментировать
  • Поиск, удаление и замена строки из кортежа в списке, как реализовать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    from itertools import repeat
    d = {}
    for x in [('a', 'd', 'z', 'x'), ('b', 'e ', 'k', 'l'), ('b', 'e', 'm', 'n'), ('c', 'f', 'g', 'h'), ('c', 'f', 'y', 'w')]:
        d.setdefault(x[:2], {}).update(zip(x, repeat(None)))
    print([list(v.keys()) for v in d.values()])

    Но у вас во втором кортеже пробел около "e" и, строго говоря, ваше решение неверно.
    Либо пробел уберите, либо можно стрипнуть ключи заменив x[:2] на tuple(map(str.strip, x[:2]))
    Тут не использованы множества, чтобы не терять порядок элементов.
    Ответ написан
    Комментировать
  • Как скачать файл по непрямой ссылке?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Откройте дебаг-консоль браузера и посмотрите какой именно запрос делает браузер для скачивания файла. Нажмите правой кнопкой и скопируйте CURL-команду для выполнения этого запроса из командной строки.
    В условиях той скудной информации что вы предоставили (без примеров) вам подробнее ничто не подскажет.
    Ответ написан
    4 комментария
  • Как сделать запрос в гугл?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Комментировать
  • ЯндексПрактикум, почему бот не видит вложенную функцию?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Функция в питоне - это объект первого рода.
    В питоне всё - объекты. И функция и число и строка и список и словарь и класс и экземпляр класса.
    У каждого объекта может быть много имён. Рассматривайте имя объекта, как ярлычок, привязанный к чайному пакетику.
    print_friends_count(count)
    Здесь print_friends_count это имя переменной, а скобочки после него заставляют вызывать объект, доступный пр этому имени как функцию. Вызов происходит с передачей единственного аргумента, который доступен по имени count.

    Если в коде на питоне в каком-то выражении (а вызов функции - это выражение; результат вызова - это всегда какое-то значение, например None; да, None - это тоже объект, его возвращает функция по умолчанию) встречается какое-то имя, то это имя ищется в локальной области видимости этой функции (то есть в самой функции), потом в той области видимости, где объявлена функция, потом еще выше и так далее до самого модуля. Самая верхняя - глобальная область видимости - это модуль. Если имя не нашлось нигде, даже в модуле, то оно поищется среди __builtins__ - это такой словарик с именами и объектами, доступными везде. Если не найдётся и там, то будет ошибка.
    В вашем случае функцию следовало оставить на уровне модуля. Вызвать ее можно будет где угодно внутри модуля, но при условии, что оператор объявления функции уже выполнен.

    При запуске программы (или импорте модуля) по очереди выполняются все операторы (импорты, объявления функций/классов, присвоение имен результатам каких-то выражений...)

    Мне кажется вам стоит скачать книжку Лутца про изучение питона с нуля и вдумчиво прочитать. По порядку.
    Ответ написан
    1 комментарий
  • Косячок с QR кодом, сделанным в Python при отправке в Telegram. Как исправить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    JPEG не нужен.
    Отмасштабируйте png с помощью PIL (Pillow)
    Ответ написан
  • Какие варианты слияния списков есть?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    a = [x or y for x, y in zip(a, b)]
    Ответ написан
    Комментировать
  • Как убрать лесенку после Image.rotate()?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    resample=Image.BICUBIC, expand=True
    Всегда лучше поворачивать большое изображение, а потом уменьшать, чем наоборот, поворачивать маленькое, а потом увеличивать.
    Ответ написан
    5 комментариев
  • Как вычислить время, которое идёт матч?

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

    Так вы делайте немного по-другому и будет работать лучше.
    Ответ написан
    2 комментария
  • Можно ли на языке Python написать программку живой баланс интернета на рабочем столе Win 7, 10?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Посмотрите в сторону PyQt.
    Вот вопрос на стек-оверфлоу про систем трей: https://stackoverflow.com/questions/893984/pyqt-sh...
    Да, черт возьми, тема без проблем ищется с миллионом работающих примеров. Почему вы вообще решили сначала задавать вопрос, прежде чем гуглить?
    Примеров сети полно. Не понятно что вам не понятно. Если не ясно как вообще программировать, то пройдите онлайн курсы, посмотрите релевантные видео-уроки в ютубе, закажите релевантную книжку и почитайте на досуге.
    Ответ написан
    Комментировать
  • Как отправлять сообщение пользователю в Telegram через бота?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    По-хорошему никак. Дело в том, что, если бы была штатная возможность этого, то мы бы утонули в спаме. Очевидно, что если пользователю нужна ваша рассылка, то у него есть возможность подписаться на нее: прийти и подписаться на ваш канал, подружиться с вашим ботом и т.д.. Кроме того, вы можете попробовать дать официальную рекламу в том канале, к пользователям которого хотите обратиться. Конечно администратор канала вряд ли захочет рекламировать конкурента и реклама вроде "Приходите на мой канал, там всё стырено с этого, но есть много полезных дополнительных плюшек..." не прокатит.

    Технически вы можете сделать бота, который будет не ботом по факту, а выступать в роли телеграм-клиента притворяясь человеком. Это даст ему возможность вступить в какую-то группу, получить её пользователей и что-то им слать, но это не канал, это группа. А вашего клиента придётся регистрировать, а если он начнёт рассылать спам и на это начнут жаловаться люди, вашего клиента мгновенно прикроют.

    Короче, плохая идея. Не делайте так.
    Сделайте лучше что-то полезное и люди сами к вам придут.
    Ответ написан
    Комментировать
  • Как узнать характеристики компьютера python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Pythonchik3, вы необоснованно обобщаете совершенно разные задачи в один вопрос. Вы что, хотите, чтобы вам всё это написали в ответе в одной программе?
    Наличие инета определяется пингом. Ищите диагностические утилиты и используйте их выхлоп. Нет смысла писать свой велосипед с нуля. В линуксе всё это можно получить стандартными утилитами, поставляемыми вместе с системой. В винде наверняка тоже как-то можно через павер-шелл. Но это всё ищется по отдельности. Ну или можно поискать готовую библиотеку, которая собирает информацию о системных ресурсах.
    Ответ написан
    Комментировать
  • Как получить из json ответа несколько однотипных данных?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Можно и без питона, если у вас есть curl и jq:
    curl https://jsonplaceholder.typicode.com/todos | jq '.[].id'

    Или всё же с питоном:
    curl https://jsonplaceholder.typicode.com/todos | py '(o["id"] for o in json.loads(sys.stdin.read()))'
    Ответ написан
    Комментировать
  • Как проверить наличие элемента с индексом в списке?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну во-первых, это не список, а кортеж: test = (1,2,3)
    Во-вторых... а в чем проблема собственно? len(test) > 2
    Ещё можно вот так поступить, особенно если вам нужен потом будет этот второй элемент:
    test = (1,2,3)
    second = test[2:3]
    second = second[0] if second else None

    Но надо стараться делать максимально просто и читабельно.
    Ответ написан
    1 комментарий
  • Как сравнивать кириллические символы в Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Лучше это сделать так:
    str1 = "АБВГДЕ"
    set_of_char = set("ЕОРФ")
    for c in str1:
        if c in set_of_char:
            print("OK")

    Ещё лучше так:
    str1 = "АБВГДЕ"
    set_of_char = set("ЕОРФ")
    if set(str) & set_of_char:
        print("OK")
    Ответ написан
    Комментировать