python_academy | Unsorted

Telegram-канал python_academy - Python Academy

51359

Python Academy — один канал вместо тысячи учебников Чат канала: @python_academy_chat Сотрудничество: @zubar89 Канал включён в перечень РКН: https://rkn.link/TVu

Subscribe to a channel

Python Academy

Валидаторы данных

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

Модуль validators позволяет использовать уже готовые валидаторы для самых распространенных задач. В примере можете как раз увидеть валидацию почты и ссылок.

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

#python #validators

Читать полностью…

Python Academy

Работаем с f-строками

Думаю, про f-строки как метод форматирования все уже знают. Напоминаю, что появились они еще в Python 3.6.

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

#python #f_string

Читать полностью…

Python Academy

Разница между генераторными выражениями и генераторами коллекций

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

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

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

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

#python

Читать полностью…

Python Academy

Работаем с файловыми путями

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

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

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

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

#pathlib

Читать полностью…

Python Academy

Pyrogram: Работа с Telegram API на Python

Pyrogram - это выдающаяся библиотека на Python, предназначенная для удобной и эффективной работы с Telegram API. Она предоставляет разработчикам возможность создавать ботов, приложения и скрипты для Telegram Bot API, а также взаимодействовать с Telegram User API для отправки сообщений, управления чатами и многих других задач.

Для начала работы с Pyrogram, вы можете установить библиотеку с помощью pip. Затем вы можете легко настроить своих ботов и приложения, задавая им различные функциональности. Pyrogram обеспечивает удобное взаимодействие с API, что делает разработку ботов и приложений более простой и эффективной.

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

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

Документация доступна тут

Читать полностью…

Python Academy

Хэширование

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

Для хэширования значений есть встроенная функция hash(). Используется она в основном для сравнения значений разных объектов — сравнивать хэши легче и выгоднее.

Но изменяемые объекты по типу списков и словарей нельзя хэшировать — интерпретатор выбросит соответствующую ошибку.

Здесь, кстати, есть две пасхалки. Хэш бесконечности равен перым цифрам числа Пи, а хэш Not a Number равен нулю.

А еще случаются коллизии: например, хэши чисел -1 и -2 одинаковы.

#hash

Читать полностью…

Python Academy

🌐 Копирование веб-содержимого в Python с библиотекой pywebcopy

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

Пример кода:


from pywebcopy import save_webpage

url = 'https://www.example.com'

target_folder = 'path/to/folder'

save_webpage(url, target_folder)


В данном примере используется функция save_webpage для копирования веб-содержимого указанной веб-страницы (url) в указанную целевую папку (target_folder).

Библиотека pywebcopy предоставляет простой и удобный способ копирования веб-содержимого прямо из Python. Она может быть полезна при создании скриптов для загрузки данных с веб-страниц, автоматизации сбора информации или создании зеркал сайтов. 💻

#python #pywebcopy

Читать полностью…

Python Academy

Читаем текст с картинки используя Tesseract от Google

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

Pytesseract - это удобная оболочка для системы Tesseract, облегчающая её использование.

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

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

Пример кода:


from PIL import Image
import pytesseract

# Открываем изображение с помощью Pillow
image = Image.open('image.jpg')

# Используем pytesseract для извлечения текста
text = pytesseract.image_to_string(image, lang='rus')

print(text)

#python #pytesseract

Читать полностью…

Python Academy

PyQtGraph

PyQtGraph — это библиотека Python для создания интерактивных 2D и 3D графиков, а также элементов графического интерфейса (GUI). Она основана на PyQt (или PySide) и NumPy, что делает ее мощным и универсальным инструментом для научных, инженерных и исследовательских задач.

#python

Читать полностью…

Python Academy

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

Для обработки передаваемых аргументов и создания удобный интерфейс командной строки в python есть отличный модуль argparse.

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

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

После добавления всех аргументов, нам нужно их спарсить с помощью метода parse_args, на выходе мы получим объект со всеми содержащимися аргументами.

#argparse

Читать полностью…

Python Academy

Сбер представил российскую альтернативу JetBrains — GigaIDE Pro

На конференции ЦИПР Сбер презентовал новую версию интегрированной среды разработки GigaIDE Pro, которая заменяет зарубежные аналоги. Старший вице-президент Сбера Андрей Белевцев отметил, что GigaIDE Pro обеспечивает устойчивость и безопасность ИТ-процессов, минимизируя зависимость от иностранных платформ.

В новой версии GigaIDE Pro для Python-разработки добавили инструменты быстрого создания проектов на Django и Flask, а также навигацию по коду для фреймворков Spring и Jakarta. По данным Сбера, GigaIDE Pro уже занимает 14% рынка IDE в России.

Читать полностью…

Python Academy

Паттерн проектирования Singleton

Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр. 

Метод __new__ вызывается для создания экземпляра класса, перед вызовом __init__. На вход первым аргументом метод принимает сам класс, а возвращать должен уже экземпляр (даже можно экземпляр и другого класса).

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

То есть при вызове конструктора класса Singleton, будет возвращаться один и тот же объект из памяти.

#классы #паттерны

Читать полностью…

Python Academy

PyAutoGUI

PyAutoGUI позволяет Python управлять мышью и клавиатурой для автоматизации взаимодействия с другими приложениями. Пакет работает в Windows, macOS и Linux на Python 2 и 3.

Из ключевого функционала можно выделить следующее:

— Передвижение курсора и нажатие на кнопки мыши;
— Набор текста, например для заполнения форм;
— Скриншоты, поиск указанных изображений на экране (например, иконки) и нажатие на них;
— Поиск приложения на экране, изменение размера его окна, перемещение по экрану и т. д.

Основные функции показаны в примере на картинке выше, остальное — в документации проекта.

#pyautogui

Читать полностью…

Python Academy

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

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

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

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

#psutil

Читать полностью…

Python Academy

Работаем с атрибутами объектов

Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции: getattr, setattr, delattr и hasattr.

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

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

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

#python #tips

Читать полностью…

Python Academy

Распаковывание последовательностей при неизвестном числе элементов

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

#python

Читать полностью…

Python Academy

База данных на минималках

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

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

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

#shelve

Читать полностью…

Python Academy

Добавляем классу большую функциональность

На прошлой неделе мы объясняли декоратор @classmethod, а сейчас рассмотрим @staticmethod.

@staticmethod можно воспринимать как метод, который "не знает, к какому классу относится". Он просто получает переданные аргументы, без неявного первого аргумента, и его определение не изменяется через наследование. Еще раз: статические методы прикреплены к классу лишь для удобства — и не могут менять состояние ни класса, ни его экземпляра.

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

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

Читать полностью…

Python Academy

Что такое глубокая копия?

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

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

Читать полностью…

Python Academy

Работа с YAML-Файлами в Python с Помощью Библиотеки PyYAML

PyYAML позволяет эффективно работать с файлами в формате YAML (YAML Ain't Markup Language), который широко используется для конфигураций, настроек и обмена данными в структурированной форме.

import yaml

data_to_write = {'name': 'John Doe', 'age': 30, 'city': 'Example City'}
with open('example.yaml', 'w') as file:
yaml.dump(data_to_write, file, default_flow_style=False)

with open('example.yaml', 'r') as file:
loaded_data = yaml.safe_load(file)
print(f"Загруженные данные: {loaded_data}")


Результат (файл example.yaml):
age: 30
city: Example City
name: John Doe

В этом примере мы используем PyYAML для записи словаря data_to_write в файл example.yaml и затем загружаем данные из этого файла обратно в переменную loaded_data.

Библиотека PyYAML предоставляет удобные средства для работы с данными в формате YAML в Python. Будь то сохранение конфигураций, обмен структурированными данными или другие сценарии, где YAML имеет преимущество, PyYAML обеспечивает легкость в использовании и читаемый код🐍

#python #yaml #pyyaml

Читать полностью…

Python Academy

Поверхностное копирование

Копирование объектов может быть «поверхностное» (shallow) или «глубокое» (deep). Различия между ними заключаются в том, как обрабатываются вложенные объекты.

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

#python

Читать полностью…

Python Academy

Сохранение документации функции при декорировании

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

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

#декораторы #wraps

Читать полностью…

Python Academy

Создание скриншотов с использованием модуля pyscreenshot

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

Для захвата изображения используется метод grab, для его отображения – show, а для сохранения – save. В метод grab можно также передать аргумент bbox, чтобы ограничить захват только определенной областью экрана.

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

#python #pyscreenshot

Читать полностью…

Python Academy

Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

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

#генераторы

Читать полностью…

Python Academy

Голосовой вывод в Python с помощью pyttsx3

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

Что такое pyttsx3?
pyttsx3 - это простой в использовании модуль Python для синтеза речи. Он предоставляет возможность преобразования текста в речь с различными настройками, такими как выбор голоса и регулирование скорости речи. Эта библиотека основана на популярной библиотеке pyttsx, но с более активной поддержкой и совместимостью с Python 3.

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

Пример использования pyttsx3 на фото.

Читать полностью…

Python Academy

Применяем pathlib взамен os

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

Одно из наиболее впечатляющих преимуществ использования pathlib - это упрощение работы с путями за счет использования Path вместо os.path.join, представляя более простой и изящный метод, как показано на изображении.

В общем, этот модуль предлагает замену функциям для работы с файловыми путями из модуля os, таким как os.mkdir или os.path, на более удобные альтернативы.

#path #os

Читать полностью…

Python Academy

Поиск уникальных слов в текстовом файле в Python

Чтобы найти уникальные слова в текстовом файле в Python, необходимо очистить текст, найти слова, а затем найти уникальные.

Подробнее можно почитать здесь.

Читать полностью…

Python Academy

Работа с методом str.replace() в Python

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

Метод принимает два основных аргумента: первый - это подстрока, которую нужно заменить в исходной строке, а второй - это подстрока, на которую происходит замена.

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

#python #replace

Читать полностью…

Python Academy

Асинхронно скачиваем файлы

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

Но в таких ситуациях как эта (скачивание огромного количества небольших файлов) распараллеливание задачи существенно ускорит процесс.

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

Далее метод .map(download, urls) создает екземпляры нашей функции для скачивания файла, и раскидывает в них элементы списка urls.

Но будьте внимательны: так как скачивание файла — это IO-операция, такой метод не ускоряет вычисления кода. Он лишь позволяет запустить скачивание следующего файла, не дождавшись пока скачается предыдущий.

#python #threading

Читать полностью…

Python Academy

Ещё одна пасхалка

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

Но будет вызвано исключение, которое говорит "not a chance", что означает "ни единого шанса". Однако есть ещё один интересный момент, а именно – исходный код этого модуля.

Оказывается, интерпретатор CPython сначала запускает файл future.c, когда встречается импорт этого модуля. А само это исключение реализовано на этой строчке.

#пасхалки #future

Читать полностью…
Subscribe to a channel