Telegram Web Link
Логирование с Loguru

В Python уже существует библиотека для логирования logging, но у неё есть одна проблема — время, которое мы тратим на настройку конфига, да и работа с ним затрудняется, если конфиг становится больше.

Вместо этого можно использовать loguru, и на это есть несколько хороших причин:

loguru легче настраивается, чем logging;
— Асинхронность;
— Имеет много встроенных решений внутри, таких как отправка уведомлений на почту, стек вызовов и т.д.;
— Понятность.

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

Ссылка на документацию — тут.
Интерактивный пример — тут.

#Loguru
Объект Ellipsis

В Python есть крайне интересный объект, который обозначается как ..., то есть многоточие. Этот объект называется Ellipsis, и используется он в основном как заготовка для чего-то еще не реализованного.

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

Если привести его к логическому типу данных, то увидим True — это важный момент, потому что похожий по своей сути None выдает False.

#ellipsis
Время исполнения программы

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

Как вариант, можно воспользоваться функцией time из модуля time, которая возвращает текущее время в формате Unix.

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

Использование time.time() — не самый точный и лучший вариант, но, например, для быстрого сравнения двух разных частей кода подходит хорошо.

#time
​​Получаем срез из бесконечного генератора

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

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

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

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

#itertools
Используйте dict.get() вместо dict[]

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

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

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

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

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

#словари
Decimal и Fraction

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

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

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

#decimal
Генерация капчи

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

Все максимально просто, за нас по сути все делает уже написанный в модуле код. Создаем объект изображения ImageCaptcha, на который будет нанесен текст. После чего вызываем метод write с заданным текстом и именем файла, в который будет записано изображение.

#captcha
Воспроизводим аудиофайлы

Для этого воспользуемся кроссплатформенным пакетом playsound, который легко устанавливается через pip.

Он содержит в себе лишь одну полезную функцию для воспроизведения аудиофайла: playsound('path/to/file.mp3')

В качестве параметра функции можно указать путь к .mp3 или .wav файлу, или вообще его url.

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

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

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

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

#schedule
Аргументы командой строки

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

Первым элементом всегда является имя запускаемого скрипта, вторым и далее — непосредственно сами аргументы.

#sys
Списковые включения

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

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

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

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

#списки #словари
Конвертируем файлы в аудио-формате

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

Для загрузки файла нам нужно выбрать функцию from_ c соответствующим форматом в названии из класса AudioSegment. Также можно воспользоваться наиболее общей функцией from_file, передав путь к файлу и его формат.

Для экспорта файла с нужным форматом, в который мы хотели его сконвертировать, используем функцию export у полученного после загрузки файла объекта класса AudioSegment.

#audio #pydub
Работаем с картинками в Python

Библиотека Pillow — это очень мощный, быстрый и удобный инструмент для обработки графики в Python.

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

Метод Image.open('resources/img/cat.jpg') считывает картинку из папки.

img.convert('L') трансформирует картинку в черно-белую.

ImageOps.invert(image) обращает цвета.

img.transpose(Image.FLIP_LEFT_RIGHT) вертикально отзеркаливает картинку.

img.save('grayscale_cat.jpg') сохранит картинку на диске.

Больше официальных примеров и документацию можно посмотреть тут.

Пример можно посмотреть тут.

#pillow
Определение литеральных типов

Когда нам может понадобится определить из полученной строки литеральный тип (строки, числа, списки, кортежи, словари, логические значения и None), мы можем воспользоваться функцией literal_eval() из модуля ast.

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

#ast #literal_eval
Missingno

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

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

Интерактивный пример — тут.

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

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

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

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

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

#pytesseract
Официальное упорядочивание словарей

Кстати, Python 3.7 на официальном уровне зафиксировал соответствие порядка перебора элементов словарей порядку их добавления.

Но для некоторых это не такая уж и новость, так как и в Python 3.6 словари уже были упорядочены, что видно на примере выше.

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

#словари
Сеньор от мидла отличается как минимум несколькими цифрами в зарплате

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

👉 Статья на Хабре и матрица компетенций по уровням
Генераторные выражения и списковые включения

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

Если вывести переменные, то видим, что значением переменной l является список, а переменная g хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

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

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

#генераторы
Легкий веб-фреймворк

Bottle – это быстрый, простой и легкий микро-веб-фреймворк WSGI для Python. Он распространяется как единый файловый модуль и не имеет никаких зависимостей, кроме стандартной библиотеки Python.

Несмотря на свою минималистичность, Bottle предоставляет довольно широкие возможности, которых на 100% хватает для мелких и средних проектов. Вот список основных возможностей: routing, templates, POST-routing, обработка форм, cookies и сервер.

После запуска подобного примера можете перейти в браузере по адресу localhost:5000/hello/world и посмотреть на результат, полученный из всего пяти строк кода.

#фреймворки #bottle
2024/11/16 13:56:37
Back to Top
HTML Embed Code: