• Как обработать ошибку UnicodeDecodeError и при этом продолжить чтение файла?

    drygdryg
    @drygdryg
    Python-разработчик
    Откройте файл в двоичном режиме, читайте его построчно в цикле и пытайтесь отдельно декодировать каждую байтовую строку в строку с помощью .decode(), в одночасье обрабатывая ошибку UnicodeDecodeError:
    with open('1.txt', 'rb') as file:
        for n, binary_line in enumerate(file, start=1):
            try:
                line = binary_line.decode('utf-8')
            except UnicodeDecodeError:
                print(f'Ошибка декодирования строки {n}')
                continue
            ...
    Ответ написан
    2 комментария
  • Как отсортировать многоуровневый словарь с помощью sorted()?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    # j = {...}
    {
      k: {
         **v, 
         'protocols': {
           kk:vv
           for kk, vv in 
           sorted(
             v['protocols'].items(),
             key=lambda kv2: kv2[1],
             reverse=True
           )
         }
      } 
      for k, v in 
      sorted(
        j['10.10.100.100'].items(), 
        key=lambda kv: kv[1]['count'], 
        reverse=True
      )
    }

    Но вы лучше не делайте таким нечитабельным однострочником. Соберите заново нужные словари в обычных классических циклах, иначе такой код нельзя будет поддерживать норамльно.
    Тут смысл в том, что у sorted есть необязательный аргумент, куда можно передать функцию извлечения ключа сортировки. Перебираете сортируемые словари парами (ключ-значение) в нужном порядке и собираете в новые словари.
    Ответ написан
    Комментировать
  • Почему все говорят что писать ботов это сложно?

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

    Vindicar
    @Vindicar
    RTFM!
    А сложность начинается, как только задачи, стоящие перед ботом, перерастают уровень примера в документации видеотуториале пятилетней давности.

    Нужно сделать несколько под-команд у команды. Напишу цепочку if-elif-else, делов то. Ой, а теперь простыня кода на пять экранов, в которой фиг чего найдёшь. Потому что нет привычки структурировать код.

    Нужно, чтобы несколько команд/событий формировали цепочку (сценарий). Например, пользователь отправил тре сообщения, первое с именем, второе с возрастом, третье с адресом. Ой, а как это сделать вообще? Не зная понятия "конечный автомат" (finite state machine, FSM), очень трудно догадаться, как тут поступить.

    Нужно, чтобы ботом могли пользоваться несколько человек. Ой, их данные перепутались! Потому что бот использует глобальные переменные.

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

    Нужно добавить боту графический интерфейс - админку. Ой, а работает или интерфейс, или сам бот! Потому что нужно представлять, как устроено большинство GUI-фреймворков, и как устроена асинхронное приложение. А заодно понимать многопоточность, вопросы синхронизации действий между двумя потоками, и особенности работы с asyncio в многопоточных приложениях. Потому что одним потоком тут обойтись будет очень непросто.

    Нужно хранить данные в БД. Ой, а почему у меня проблемы при записи в БД имени пользователя? А потому что погромист собирает SQL-запрос через форматирование строк. Надо было почитать доки, чтобы наткнуться на prepared statements, они же parameterized queries.

    Нужно хранить данные в БД. Вот только данные имеют связи многие-ко-многим. Я знаю! Я буду просто добавлять или удалять столбцы в таблицу! Потому что не освоены даже азы проектирования БД. Тут уже nuff said. И да, я такое видел на этом сайте.

    Незнание средств языка и основных приемов построения алгоритмов и структур данных приводит к диким велосипедам, которые создают больше проблем, чем пользы. Особенно если к этому добавляется нежелание находить и читать документацию на фреймворк, на котором построен бот.
    Ответ написан
    1 комментарий
  • Как запоминать значение в переменную?

    Vindicar
    @Vindicar
    RTFM!
    1. Включи логику.
    2. Рукалицо.
    3. Поменяй эти две строки местами.

    Рукалицо, потому что достаточно немного подумать, чтобы понять в чём дело.
    Ты сначала присваиваешь значение в w3x3, а потом это уже изменённое значение присваиваешь в temp.
    Потому у тебя все три переменные и имеют одно и то же значение.
    Если сначала присвоить temp = w3x3, а потом уже обновлять w3x3, то тогда в temp будет лежать значение до изменения... но только при условии что это какой-то из неизменяемых типов, вроде чисел, строк или кортежей из них. Если это изменяемый объект, вроде списка, словаря или обычного класса, то не прокатит.
    Ответ написан
    Комментировать
  • Как написать свой компилятор?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Трансляторы
    Седой и строгий
    Содержимое этой книги в ответ не вместится.
    60b76e70c748b529799442.jpeg
    А ваш вопрос на столько общий, что короче не получится.
    Ответ написан
    3 комментария
  • Как сделать относительный импорт без родительского пакета?

    Maxsior
    @Maxsior
    loading...
    Если скрипт запускается из корневой папки (`python dir/module2.py`), то вам не нужен относительный импорт, используйте абсолютный `from module1 import *`, пути будут вычисляться от корня проекта.

    Но стоит всё-таки посмотреть на реорганизацию файловой структуры проекта, ради интереса хотя бы)
    Посмотрите, как сделано у крупных библиотек.
    Ответ написан
    Комментировать
  • Как сделать относительный импорт без родительского пакета?

    @Khamzabek
    Один из способов решения этой проблемы состоит в добавлении директории проекта в sys.path. Это можно сделать в самом начале module2, например так:

    import os
    import sys

    # Добавляем путь к директории проекта в sys.path
    project_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
    sys.path.append(project_directory)

    # Теперь можно импортировать module1
    from module1 import *
    Ответ написан
    1 комментарий
  • Как сделать относительный импорт без родительского пакета?

    Vindicar
    @Vindicar
    RTFM!
    Никак. Пакеты могут импортировать другие пакеты на одном с ними уровне или уровнем ниже, но не могут импортировать файлы из пакетов уровнем выше.

    Если, конечно, не манипулировать механизмом импорта. Он это позволяет, но обычно овчинка выделки не стоит.
    Так что проще закинуть module1 в каталог(пакет) и импортировать его как package1.module1.

    А вообще очень странное решение - почему скрипт верхнего уровня в каталоге, а импортируемые модули - нет?
    Ответ написан
    Комментировать
  • Какая технология актуальна для создания приложения на python под android?

    @dima20155
    you don't choose c++. It chooses you
    Kivy, Qt (для питона он представлен библиотеками PyQt6, PySide2 или их более старые версии) так позволяет собирать приложение под android, но там все не так тривиально как с Kivy.
    Также вот что предлагает google, но лично мною оные опробованы не были, поэтому советовать не берусь.
    Но лучше выбирать специально созданные для android платформы языки.
    Ответ написан
    3 комментария
  • Random в питоне не выполняет свою функцию, используясь через def,как исправить?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Все он меняет...
    >>> import random
    >>> def test():
    ...     return random.randint(0, 10)
    ...
    >>> test()
    9
    >>> test()
    0
    >>> test()
    0
    >>> test()
    1
    >>> test()
    3
    >>> test()
    9
    >>> test()
    7
    >>>
    Ответ написан
    1 комментарий
  • Вредна ли быстрая зарядка для аккамуляторов ПК/смартфонов?

    вредно в долговечном периоде. заметно будет через года 3 или более. моему телефону 2 года, заряжаю 90%-95% быстрой зарядкой. и редко когда в дороге от повербанка без быстрой зарядки, и все хорошо,
    Ответ написан
    Комментировать
  • Как выводить людей списком в 1 сообщение?

    Vindicar
    @Vindicar
    RTFM!
    str.join()

    Сначала учи язык, потом бросайся писать ботов.
    Ответ написан
    2 комментария
  • Возможно ли стать куратором в Хабр Q&A на сегодняшний день?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Я курирую много тегов и могу сказать: это бесплатный труд: поддержка контента в хорошем состоянии и наполение БД сервиса, и не более того.
    Никаких привелегий, кроме как отметить свой ответ решением вопроса, который потом другой (автор или куратор) может снять без оповещения.
    Плюсов - не так много, как могло бы быть и всё зависит полностью от администрации.
    Поэтому я и предлагал вариант иной.
    Ответ написан
    3 комментария
  • Не понимаю данную бесконечность в операторе while?

    @deliro
    Давай по буковкам читать как в детском саду:

    икс равно нулю
    пока икс меньше десяти, печатай икс

    Икс всегда равно нулю, ты это нигде не меняешь, а ноль всегда меньше десяти. Выхода из цикла не планируется, по крайней мере, в пределах нашей вселенной
    Ответ написан
    Комментировать
  • Почему считает не все символы?

    Maksim_64
    @Maksim_64
    Data Analyst
    где у вас print(a) вставьте вот этот код, вы выводите на печать длину массива, а нужно суммировать длины строк каждого элемента массива.
    print(sum(len(i) for i in a))
    Ответ написан
    Комментировать
  • Как циклом Python for пройти несколько (сотен) range?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Как сделать чтоб бот реагировал например на слово "привет" не зависимо будет ли что то после него?

    @Romeo558
    Продолжающий программист на python.
    if "привет" in msg:
         #код

    Правда тут загвоздка.
    Этот блок срабатывает если в сообщении так или иначе есть слово "привет"
    Пример:
    Привет мир! (условие сработает)
    Мир, привет! (условие тоже сработает)

    Кто то обязательно напишет корректный ответ, но это одно из решений
    Ответ написан
    2 комментария