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

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

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

Канал включён в перечень РКН: https://rkn.link/TVu
加入频道
Сравниваем Django и Flask

Оба фреймворка крайне мощные, но выбрать надо что-то одно. Из общеизвестных фактов: Django – самый востребованный в плане работы, Flask – наиболее производительный.

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

Если в приоритете трудоустройство, то следует изучать Django. Но если вы хотите быстро начать создавать пет-проекты или изучать веб в целом, то рекомендуем рассматривать Flask.

#сравнение
Превращаем PDF в текст

Думаю, все периодические работают с PDF-документами. И зачастую это ручная и скучная работа. Но Python может автоматизировать даже такую рутинную задачу.

Модуль pdftotext создан именно для работы с документами в PDF формате. Устанавливается он через пакетный менеджер pip, а использовать его проще простого. Все основные операции представлены на картинке выше.

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

#pdftotext
Создаём аудиокнигу из PDF

После предыдущего поста про работу с PDF документами возникла идея попробовать конвертировать книгу в аудиокнигу.

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

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

#gtts #pdftotext
Делаем ошибки более читаемыми

В Python есть удобный модуль pretty_errors, который делает стандартный вывод исключений и их traceback более удобным для чтения и красивым в целом.

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

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

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

#исключения #pretty_errors
Константы пакета string

Встроенный модуль string предоставляет расширенный функционал для работы со строками. Про форматируемые шаблоны из этого пакета мы уже рассказывали ранее.

Сейчас поговорим про константы этого модуля. Из интересного стоит выделить ascii_letters, punctuation, digits и whitespace — символы ascii, знаки пунктуации, цифры и пробельные символы.

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

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

#строки #string
Работаем с zip архивами

Для упрощения работы с zip файлами можно использовать встроенный модуль zipfile. Если кто не помнит, то zip файл – это архив, содержащий сжатые файлы.

Просмотреть содержимое архива можно с помощью функции printdir, а извлечь все файлы можно вызвав extractfile.

Также этот модуль позволяет создавать свои zip архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию.

#zipfile
Подключаемся к серверу по ssh

Пакет paramiko позволяет устанавливать соединение с удаленными машинами по протоколу SSH2 и производить там все те же операции, если бы вы подключались через, например, утилиту ssh на линуксе.

Использовать модуль достаточно просто, пример основный методов на картинке выше. Кстати, интересный факт, Paramiko — это сочетание слов "параноик" и "друг" на языке эсперанто.

Устанавливается пакет привычным образом через пакетный менеджер pip. А документацию можете изучить тут.

#ssh
Переводим питонячий в человеческий

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

К примеру, из сложного объекта timedelta можно получить "2 дня, 1 час и 33.12 секунд" или же "5.00 x 10²" из числа 500. Больше примеров можете посмотреть на картинке, прикрепленной к посту.

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

#humanize
Находим опечатки в тексте

Полезный пакет 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