Telegram Web Link
Все сервисы Норникеля для работников, собранные в суперапе «Суперника» — нашли отклик в сердцах работников, ведь приложение уже используют 40 тысяч человек из 22 городов России.

Приложение оказалось крайне полезным, потому что у 75% сотрудников нет ПК на рабочем месте. Суперап доступен на любом мобильном устройстве, а также в десктоп-версии с любого компьютера. В личном кабинете можно узнать информацию об отпуске, стаже работы. Есть возможность настроить новостную ленту, получить доступ к документам и справкам, узнать о корпоративных мероприятиях и оставить отклик. Также можно общаться между собой в чатах на звонках и видеосвязи.

В основе «Суперники» микросервисная архитектура. Для быстрой и бесшовной работы приложения потребовалось разработать, согласовать, прописать и настроить 3500 правил. Все сервисы работают независимо друг от друга, а это более тысячи различных соединений.
Создание скриншотов с использованием модуля pyscreenshot

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

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

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

#python #pyscreenshot
Получение геолокации по IP с использованием ip2geotools

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

from ip2geotools.databases.noncommercial import DbIpCity

def get_ip_geolocation(ip_address):
try:
response = DbIpCity.get(ip_address, api_key='free')
city = response.city
region = response.region
country = response.country
latitude = response.latitude
longitude = response.longitude

print(f"Информация о местоположении для IP {ip_address}:")
print(f"Город: {city}")
print(f"Регион: {region}")
print(f"Страна: {country}")
print(f"Широта: {latitude}")
print(f"Долгота: {longitude}")

except Exception as e:
print(f"Ошибка при получении информации по IP {ip_address}: {e}")

ip_address_to_check = '8.8.8.8'
get_ip_geolocation(ip_address_to_check)


Этот код использует метод get из класса DbIpCity для получения информации о местоположении по заданному IP-адресу. Помните о том, что для использования некоторых баз данных может потребоваться API-ключ.

#python #ip2geotools
Настройка ширины текста с использованием модуля textwrap

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

Приведем пример использования:
import textwrap

# Исходный текст
original_text = "Мощные функции модуля textwrap обеспечивают красивое форматирование текста, а функция fill позволяет задать ширину текста в символах."

# Задаем ширину текста в 30 символов
width = 30

# Применяем функцию fill для форматирования текста
formatted_text = textwrap.fill(original_text, width)

print(formatted_text)


Результат выполнения кода будет следующим:
Мощные функции модуля
textwrap обеспечивают
красивое форматирование
текста, а функция fill
позволяет задать ширину
текста в символах.


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

#python #textwrap
Придаем человеческий вид данным с помощью пакета humanize

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

Например, сложный объект timedelta может быть преобразован в "2 дня, 1 час и 33.12 секунд".

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

Пример использования в Python:
import humanize
from datetime import timedelta

time_difference = timedelta(days=2, hours=1, seconds=33.12)
humanized_time = humanize.naturaldelta(time_difference)
print(humanized_time)
# Output: 2 days, 1 hour and 33.12 seconds

number_to_humanize = 500
humanized_number = humanize.intword(number_to_humanize)
print(humanized_number)
# Output: 5.00 x 10²


В данном примере мы используем функции naturaldelta и intword из пакета humanize для получения читаемых представлений временного интервала и числа соответственно.

#python #humanize
Легкий веб-фреймворк

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

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

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

#python #bottle
Читаем текст с картинки используя 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
Функция reduce

В Python модуль functools открывает доступ к функциональным возможностям языка. Одной из замечательных функций в этом модуле является reduce, которая эффективно уменьшает коллекцию данных, последовательно применяя к ним заданную функцию и сохраняя промежуточные результаты.

Примером работы reduce может служить последовательное умножение чисел: сначала 1 умножается на 2, затем полученный результат умножается на 3, и так далее.

#python #functools
Отправка электронных писем через SMTP в Python

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

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

Авторизация на сервере осуществляется с использованием метода login, в который передаются логин и пароль пользователя.

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

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

Пример использования smtplib для отправки электронного письма:
import smtplib

smtp_server = "smtp.example.com"
smtp_port = 465 # SSL-порт
smtp_username = "your_username"
smtp_password = "your_password"

server = smtplib.SMTP_SSL(smtp_server, smtp_port)

server.login(smtp_username, smtp_password)

from_email = "[email protected]"
to_email = "[email protected]"
subject = "Тема письма"
message = "Текст письма"

server.sendmail(from_email, to_email, f"Subject: {subject}\n\n{message}")

server.quit()


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

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

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

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

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

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

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

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

#python #schedule
Управление лимитом рекурсии в Python

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

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

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

#python #recursion
Обработка видео с помощью MoviePy

MoviePy - это удобный пакет для выполнения различных задач по редактированию видео, включая обрезку и склейку клипов, добавление видеоэффектов и редактирование аудиодорожки.

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

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

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

#python #moviepy
Использование функции zip в Python

Функция zip в Python формирует итератор, объединяющий элементы из нескольких списков. Это удобно для одновременного перебора элементов нескольких списков в цикле for или для реализации параллельной сортировки.

Пример:
# Допустим, у нас есть два списка
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

# Используем функцию zip для объединения этих списков
zipped = zip(list1, list2)

# Теперь мы можем перебрать объединенные элементы
for num, letter in zipped:
print(f"Число: {num}, Буква: {letter}")

# Вывод:
# Число: 1, Буква: a
# Число: 2, Буква: b
# Число: 3, Буква: c


#python #zip
Работа с данными в Python используя Pydantic

Pydantic - это библиотека для Python, предназначенная для парсинга и валидации данных. Она использует статическую типизацию для атрибутов классов, что облегчает проверку данных при создании объектов.

Этот инструмент особенно полезен при работе с JSON: он автоматизирует проверку структуры, необходимых полей и значений.

Pydantic поддерживает не только стандартные типы данных, но и специализированные, такие как email, URL-адреса и номера платежных карт.

Для более подробного примера и документации можно обратиться сюда.

#python #pydantic
Запись экрана в Windows с помощью Python

Для записи экрана в Windows используя Python существует несколько библиотек, однако наиболее эффективной оказалась d3dshot.

Библиотека d3dshot использует системные библиотеки DXGI и Direct3D для быстрого и надежного захвата экрана.

Эта библиотека идеально подходит для создания игровых ботов.

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

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

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

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

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

#python #tips
Forwarded from Не баг, а фича
Нейронка от Сбера обошла GPT-3.5-turbo по качеству ответов на английском языке. На русском и так всё было хорошо. Теперь же, благодаря тесту MMLU, стало известно, что и на родном языке Шерлока Холмса правильность ответов GigaChat PRO на 6% выше, чем у разработки от OpenAI.

То чувство, когда можешь в англ лучше, чем его носитель.

@bugnotfeature
Современный способ сериализации, десериализации и валидации данных

adaptix - гибкая и легко конфигурируемая библиотека для сериализации и десериализации данных.

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

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

Особое внимание стоит обратить на возможность преобразования стилей названий полей, что полезно в web приложениях.

Приятным бонусом будет то, что adaptix до двух раз быстрее чем pydantic v2 (бенчмарки).

#python #typing #adaptix
Сортировка списков по ключу

У списков есть метод sort(), который сортирует элементы. Также есть аргумент reverse, с помощью которого можно отсортировать в обратном порядке при значении True.

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

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

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

#списки
2025/02/23 21:20:00
Back to Top
HTML Embed Code: