Python Academy
49.5K subscribers
1.08K photos
2 videos
374 links
Python Academy — один канал вместо тысячи учебников

Чат канала: @python_academy_chat

Сотрудничество: @zubar89

Канал включён в перечень РКН: https://rkn.link/TVu
加入频道
Находим опечатки в тексте

Полезный пакет spellchecker позволяет находить опечатки в тексте и даже дает возможные варианты исправлений.

Под капотом модуль использует алгоритм расстояния Левенштейна. А сам код основан на статье, написанной в блоге Питера Норвига. Короче, реализация интересная, советую поизучать.

Но даже если не вникать в подробности, то пакет использовать крайне легко. Примеры использования класса SpellChecker и его методов correction и candidates показаны на картинке.

Пакет поддерживает 6 языков, включая русский. Но за подробностями отправляю вас читать документацию.

#spellchecker
Делаем планировщик задач

К моему удивлению, далеко не все знают про пакет schedule, который позволяет планировать задачи и повторять их через промежуток времени.

Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще schedule не требует внешних зависимостей и сам в целом легковесный.

Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.

#schedule
Система распознавания лиц

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

Метод verify сравнивает два лица и проверяет, является ли это одним и тем же человеком или нет. В аргументы достаточно передать пути до файлов с картинками.

Еще одна мощная функция analyze анализирует лицо на фотографии и определяет возраст, пол, расу и даже эмоции. В аргументы, помимо пути до картинки, передаем список с признаками, которые надо определить.

Но что мне понравилось больше всего — пакет предоставляет возможность развернуть API на Flask прямо из коробки.

#нейронки #deepface
Получаем текст с картинки

У Google есть система Tesseract, которая позволяет парсить текст с картинок с помощью оптического распознавания символов.

И в качестве обертки над их системой, был создан пакет pytesseract, который максимально удобно и легко использовать.

Для того, чтобы получить текст с картинки, нужно вызвать метод image_to_string. Если вас интересует текст на русском, то следует указать аургмент lang как 'rus'.

Еще важно, что для открытия картинок рекомендуется использовать pillow, хоть и имеется возможность просто указать путь к файлу в виде строки.

#pytesseract
Python 3.10 beta

Многие очень ждут выхода Python версии 3.10, и вот недавно выпустили первую бета версию, с которой уже можно поэкспериментировать.

Для тех, кто в танке: альфа версии выходили регулярно в последние полгода, а полный релиз запланирован на 4 октября 2021.

Вот самые интересные фичи в новой версии:

PEP 636: долгожданный match-case, похож на switch-case в других языках.
PEP 613: явные псевдонимы типов с помощью TypeAlias.
bpo-123782: исправление небольшого, но сильно раздражающего бага с контекстными менеджерами.

#updates
Удобная работа с файловыми путями

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

Для представления пути к файлу есть класс Path, с объектами которого уже можно производить операции. Например, методы exists() и is_dir() проверяют, существует ли файл и является ли он директорией.

Но самой классной фичей является замена os.path.join() на более удобный и элегантный вариант с использованием слэшей, как показано на картинке.

Таким образом, пакет pathlib может стать частичной заменой os в некоторых случаях при работе с файловыми путями.

#pathlib
Отправляем электронные письма

SMTP (Simple Mail Transfer Protocol) — это протокол, позволяющий отправлять электронные письма. В стандартной библиотеке есть пакет smtplib, реализующий его поведение.

Для подключения к серверу будем использовать класс SMTP_SSL, который включает в себя и шифрование. В его аргументы передаем адрес сервера и порт. Авторизация происходит с помощью метода login, в который передаем соответственно логин и пароль.

Отправлять письма можно одноименным методом sendmail, который принимает адреса отправителя и получается, а также сам текст. В конце программы следует закрывать соединение с помощью метода quit().

Но здесь еще следует обратить внимание на то, что некоторые почтовые сервисы могут не разрешить так сразу подключаться к их серверам и производить операции. В нашем случае пришлось немного повоевать с Gmail.

#email #smtp
Бесконечность

Вообще float является крайне интересным типом данных и не перестает удивлять своими особенностями. Про значение Not a Number мы уже писали, а вот сегодня поговорим про infinity.

Строковые литералы 'inf' и 'infinity' можно конвертировать в float, и в результате получается значение бесконечности. Для отрицательной "бесконечности" нужно поставить знак минуса перед словом.

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

#float
Получаем данные о системе 

Кроссплатформенная библиотека psutil позволяет получать информацию о процессоре, памяти, диске, сети, датчиках и запущенных процессах в системе. Примеры базового использования показаны на картинке. 

Если говорить про практические применение, psutil полезен в основном для мониторинга системы, ограничения ресурсов процессов и управления запущенными процессами. 

Помимо привычных Windows, MacOS и Linux, библиотека также поддерживает системы FreeBSD, OpenBSD, NetBSD, Sun Solaris и AIX. 

#psutil
Скачиваем вебсайты целиком

Максимально простой, но при этом мощный пакет pywebcopy поможет вам клонировать отдельные веб-страницы или даже целые сайты.

Функция save_webpage скачивает страницу по указанной ссылке, в аргументы также можно передать путь, куда сохранить результат.

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

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

#pywebcopy
Работаем с QIWI кошельком

У QIWI есть открытое API, которое позволяет совершать всевозможные операции со своим кошельком. Но первым делом необходимо получить токен, чтобы пользоваться этим API.

Для работы с QIWI есть удобный пакет pyqiwi. Класс Wallet реализует представление кошелька, в аргументы конструктора передаем полученный ранее токен и свой номер телефона. Проверить баланс можно методом balance().

Отправить деньги на другой кошелек можно с помощью метода send(), в который передаем идентификатор провайдера, номер телефона получателя, сумму платежа и комментарий.

#pyqiwi
Логические all и any

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

Функция any возвращает значение True, если хотя бы одно из переданных утверждений верно, all – в случае, если все верны.

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

#all #any
Генерируем фейковые данные

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

Например, методы name, addres, email и job создадут для вас случайные имена, адреса, почты и названия работ.

Еще есть метод text(), который генерирует случайный текст, но, как видите в примере, результат получается неосмысленный.

Вообще методов в пакете много, продемонстрировать все в одном посте нереально, поэтому можете почитать больше в документации.

Плюс здесь еще в том, что данные можно локализировать под свой язык. Для примера мы поставили русский.

#faker
Редактируем видео

Пакет moviepy позволяет обрезать и склеивать видео, добавлять видеоэффекты, а также редактировать звук.

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

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

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

#moviepy
Получаем и задаем лимит рекурсии

В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает RecursionError во время создания рекурсивных алгоритмов.

Но с помощью модуля sys можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти.

И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.

#рекурсия #лимиты
Флаги явного преобразования

Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием.

Это поле можно использовать для переопределения поведения format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:

!r — преобразует значение в строку, используя функцию repr().
!s — преобразует значение в строку, используя функцию str().

В примере, в случае с флагом !r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s — без кавычек (в более удобном для чтения виде).

#строки
Мастхэв библиотека для каждого проекта

Как оказалось, не все еще в курсе топовой библиотеки boltons, которая отлично дополняет стандартную библиотеку. Я лично сам регулярно использовал утилиты оттуда в последний месяц и теперь не понимаю, как раньше жил без этого пакета.

Название boltons произошло от слова builtins, а так называют уже встроенный функционал. То есть разработчики прямо намекают, что их библиотека должен быть по умолчанию в Python.

Внутри находится 250+ мощных инструментов, включая кеширование, 2 типа приоритетный очередей, продвинутый itertools, 2д структуры данных, обертки для сокетов и много всего другого.

В качестве примера приведу утилиту strutils. Она позволяет производить всевозможные операции со строками и экономит время на написании костылей.

На картинке выше показано, как можно легко разделить строку по знакам пунктуации, сделать слаг, вытащить текст из HTML и найти хештеги в строке.

#boltons #строки
Упрощенная работа с JSON

Казалось бы, куда еще проще, но есть один интересный пакет JMESpath, который позволяет декларативно указать, как извлекать элементы из документа JSON.

Основные примеры использования показаны на картинке, там нет ничего сложного. Метод search принимает паттерн, по которому требуется извлечь данные, а также словарь (который в общем-то похож на JSON).

Вообще возможностей у пакета достаточно, поэтому он достоен изучения и применения в проектах. Подробнее советую почитать в документации.

#json #jmespath
Получи оффер в Яндексе за 2 дня 🔥

Яндекс проводит Weekend offer, и это отличная возможность получить оффер для тех, кто прогает уже больше 2-х лет и умеет писать на С++, Java, Python, C#, Go или Kotlin. Нужно до 30 мая пройти автоматизированный отбор, а 5-6 июня написать 2 классных кода и пройти финальное собеседование с командой. Ну и все, оффер от Яндекса у тебя в руках!

Скоро регистрация закроется, поэтому переходи по ссылке сейчас.
​​Получаем срез из бесконечного генератора

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

И в целом задача вполне простая, но сейчас рассмотрим лаконичный вариант — воспользуемся пакетом itertools, в котором есть функции на все случаи генераторов.

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

Для примера мы написали функцию-генератор, которая вычисляет числа Фибоначчи. Результат можете посмотреть на картинке.

#itertools
Кэшированные атрибуты

Во встроенном пакете functools есть классный декоратор @cached_property, который позволяет кэшировать результат метода и загнать его в атрибут.

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

Подобное кэшеирование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.

По сути, @cached_property можно сравнить с комбинацией декораторов @property (про это был пост) и @functools.lru_cache (и про это тоже).

#functools #cached_property