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

Перестаньте переделывать то, что уже существует, и сосредоточьтесь на своем приложении.

В этом посте мы рассмотрим некоторые модули Python из PyPI (и некоторые стандартные), которые улучшают язык в целом и расширяют набор его функций. Эти модули помогут вам сосредоточиться на том, что у вас получается лучше всего: на программировании.

Давайте взглянем.

1. Мошенник



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

Возможно, вы уже слышали о Faker API. Первоначально он был разработан как модуль JavaScript, но теперь был добавлен в Python.

Используя модуль Faker, вы можете генерировать поддельные данные, такие как адреса, страны и даже люди. Если вам нужно протестировать некоторый код на «пользовательских» данных, то это идеальный модуль для использования.

Вот как мы могли бы начать генерировать некоторые поддельные пользовательские данные с помощью модуля:

from faker import Faker

fake = Faker()

print(fake.name())
print(fake.address())

Это распечатает поддельное имя и адрес для вашего нового фальшивого пользователя. Если вам нужна еще более подробная информация, вы также можете обратиться к другим поставщикам Faker:

from faker import Faker
from faker.providers import phone_number

fake = Faker()
fake.add_provider(phone_number)

print(fake.name())
print(fake.address())
print(fake.phone_number())

Существует множество модулей с данными, начиная от кредитных карт и номеров социального страхования и заканчивая смайликами. Это находка для тестирования. Нужно убедиться, что вы правильно анализируете штрих-коды или номера телефонов? Загрузите этого провайдера, и все готово.

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

2. Подушка



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

Подушка идеальна из-за простоты ее использования. Допустим, вы хотите преобразовать PNG в JPG. Кажется достаточно простым, верно?

from PIL import Image

png_image = Image.open('test.png')
rgb_image = png_image.convert('RGB')
rgb_image.save('test.jpg')

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

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

Подробная документация доступна здесь.

3. Очередь



Хотя раньше это была сторонняя библиотека, с тех пор она была добавлена ​​в стандартную библиотеку Python. Это делает его еще проще в использовании. Модуль Queue предоставляет потокобезопасную очередь для размещения элементов и извлечения элементов из нее. Вещи идут в один конец и выходят из другого, как настоящая очередь.

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

Давайте посмотрим на этот простой пример с двумя потоками:

from queue import Queue
from threading import Thread
from time import sleep

my_q = Queue()

def queue_putter():
  for i in range(0, 10):
    my_q.put(i)
    sleep(1)

def queue_getter():
    while True:
      if not my_q.empty():
        print(my_q.get())

Thread(target=queue_putter).start()
Thread(target=queue_getter).start()

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

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

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

4. Красивый суп4



Python хорош для многих вещей из коробки. Веб-скрапинг на самом деле не является одним из них. Вам понадобится надежный синтаксический анализатор HTML, если вы хотите выполнять какую-либо реальную работу со схемой веб-страницы. Для этого вам следует выбрать BeautifulSoup4.

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

Давайте посмотрим, как мы можем получить HTML-код с веб-страницы с помощью этого модуля:

import requests
from bs4 import BeautifulSoup

req = requests.get('https://crummy.com/software/BeautifulSoup')

html = BeautifulSoup(req.content, 'html.parser')

print(html)

Когда вы запустите это, вы увидите тонну необработанного HTML, напечатанного на консоли. Это здорово, но еще не демонстрирует истинную мощь bs4.

Что, если мы хотим найти элемент на странице? Искать иголку в стоге сена легко:

import requests
from bs4 import BeautifulSoup

req = requests.get('https://crummy.com/software/BeautifulSoup')

html = BeautifulSoup(req.content, 'html.parser')

res = html.find("title")

print(res)

Когда вы запустите приведенный выше фрагмент, вы должны увидеть только отображаемый элемент <title>. Теперь вы можете увидеть все возможности BeautifulSoup4. Программный поиск по веб-страницам и анализ их содержимого.

Этот модуль отлично подходит для извлечения важных битов данных с веб-сайтов, которые могут не предлагать API, но имейте в виду, что это может нарушать условия использования для некоторых организаций. Если вы слишком часто очищаете веб-страницы, ваш IP-адрес может быть забанен. Имейте это в виду и счастливого парсинга!

Посетите официальный веб-сайт BeautifulSoup для получения дополнительной информации.

5. Нажмите



Если вы какое-то время работали с Python, вы, вероятно, знаете о модулях argparse и optparse. Это проверенные и надежные методы создания интерфейсов командной строки в Python. Но у этих модулей не самый элегантный синтаксис. Они существуют уже некоторое время, и их установка может быть громоздкой, если вам нужно всего несколько простых аргументов.

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

Вот простой пример из официальной документации Click:

import click

@click.command()
@click.option("--count", default=1, help="Number of greetings.")
@click.option("--name", prompt="Your name", help="The person to greet.")
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for _ in range(count):
        click.echo(f"Hello, {name}!")

if __name__ == '__main__':
    hello()

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

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