🤖 Разработка простого чат-бота с использованием NLP и TF-IDF
📌 Этот код демонстрирует создание простого чат-бота, который использует TF-IDF для анализа текста и поиска наиболее подходящего ответа на пользовательский запрос. Бот векторизует входные данные и вычисляет косинусное сходство, чтобы выбрать лучший ответ из списка заранее заданных фраз. Подобный подход может быть полезен в службах поддержки клиентов и для автоматизации простых текстовых взаимодействий.
Подпишись 👉🏻 @KodduuPython 🤖
import nltk
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
nltk.download('punkt')
class SimpleChatBot:
def __init__(self, responses):
self.responses = responses
self.vectorizer = TfidfVectorizer()
self.tfidf_matrix = self.vectorizer.fit_transform(self.responses)
def get_response(self, user_input):
# Векторизация пользовательского ввода
user_tfidf = self.vectorizer.transform()
# Вычисление косинусного сходства
similarities = cosine_similarity(user_tfidf, self.tfidf_matrix)
# Выбор наилучшего ответа
best_match_idx = np.argmax(similarities, axis=1)
return self.responses[best_match_idx[0]]
# Пример использования
responses = [
"Привет! Как я могу помочь?",
"Я могу ответить на ваши вопросы.",
"Извините, я не понимаю ваш запрос.",
"Спасибо за обращение!"
]
chat_bot = SimpleChatBot(responses)
user_input = "Как вы можете помочь?"
response = chat_bot.get_response(user_input)
print("Бот:", response)
📌 Этот код демонстрирует создание простого чат-бота, который использует TF-IDF для анализа текста и поиска наиболее подходящего ответа на пользовательский запрос. Бот векторизует входные данные и вычисляет косинусное сходство, чтобы выбрать лучший ответ из списка заранее заданных фраз. Подобный подход может быть полезен в службах поддержки клиентов и для автоматизации простых текстовых взаимодействий.
Подпишись 👉🏻 @KodduuPython 🤖
🤔2
🔄 Асинхронное скачивание веб-страниц с помощью asyncio
📌 Этот код позволяет асинхронно загружать несколько веб-страниц одновременно, что может существенно повысить скорость выполнения задачи по сравнению с последовательными HTTP-запросами. Он подходит для ситуаций, когда требуется обработка большого количества запросов с минимальной задержкой, например, при создании веб-скрейперов или загрузке данных из API.
Подпишись 👉🏻 @KodduuPython 🤖
import asyncio
import aiohttp
from aiohttp import ClientError
async def fetch(session, url):
try:
async with session.get(url) as response:
return await response.text()
except ClientError as e:
print(f"Ошибка при загрузке {url}: {e}")
return None
async def download_pages(urls):
async with aiohttp.ClientSession() as session:
tasks =
return await asyncio.gather(*tasks)
# Пример использования
urls = [
"https://example.com",
"https://example.org",
"https://example.net"
]
async def main():
pages = await download_pages(urls)
for i, page in enumerate(pages):
if page:
print(f"Содержимое страницы {urls} загружено.")
else:
print(f"Не удалось загрузить страницу {urls}.")
asyncio.run(main())
📌 Этот код позволяет асинхронно загружать несколько веб-страниц одновременно, что может существенно повысить скорость выполнения задачи по сравнению с последовательными HTTP-запросами. Он подходит для ситуаций, когда требуется обработка большого количества запросов с минимальной задержкой, например, при создании веб-скрейперов или загрузке данных из API.
Подпишись 👉🏻 @KodduuPython 🤖
Forwarded from AIGENTTO
Внедрение за две недели
Лучший свой MVP и сразу внедрение я сделал в ~2002 году, у меня был компьютерный салон (ну где школота за деньги могла рубиться в контру и прочие радости).
Я нанял работников, и выручка упала (стали воровать).
Тогда я сел и за две недели, не выходя из салона, написал систему управления компьютерным залом под Windows. TCP/IP, клиент-сервер и т.д.
Каждый день (ну, может, кроме первых 2-3 дней) я выкатывал новую версию на все компы и на комп админа. И сразу в бою тестировал. Были баги, глюки, хитрая школота находила способы убить мой процесс и разлочить комп. Но спустя две недели всё заработало как надо.
Больше таких скоростных внедрений и решения проблем бизнеса я не видел никогда. Была реальная понятная мне проблема, я смог посвятить этому 200% своего времени, то есть полный фокус, не было необходимости в коммуникации.
Мне это говорит об одном — сделать очень много за спринт можно — достаточно, чтобы было понимание проблемы, полный фокус, быстрая обратная связь и нужные тех. скилы.
Кстати, скоро мы соберём фреймворк, на котором можно будет выкатить мультиагентную систему с RAG за 2-3 дня 🔥
Подпишись 👉🏻 @aigentto 🤖
Лучший свой MVP и сразу внедрение я сделал в ~2002 году, у меня был компьютерный салон (ну где школота за деньги могла рубиться в контру и прочие радости).
Я нанял работников, и выручка упала (стали воровать).
Тогда я сел и за две недели, не выходя из салона, написал систему управления компьютерным залом под Windows. TCP/IP, клиент-сервер и т.д.
Каждый день (ну, может, кроме первых 2-3 дней) я выкатывал новую версию на все компы и на комп админа. И сразу в бою тестировал. Были баги, глюки, хитрая школота находила способы убить мой процесс и разлочить комп. Но спустя две недели всё заработало как надо.
Больше таких скоростных внедрений и решения проблем бизнеса я не видел никогда. Была реальная понятная мне проблема, я смог посвятить этому 200% своего времени, то есть полный фокус, не было необходимости в коммуникации.
Мне это говорит об одном — сделать очень много за спринт можно — достаточно, чтобы было понимание проблемы, полный фокус, быстрая обратная связь и нужные тех. скилы.
Кстати, скоро мы соберём фреймворк, на котором можно будет выкатить мультиагентную систему с RAG за 2-3 дня 🔥
Подпишись 👉🏻 @aigentto 🤖
📸 Обработка изображений с помощью OpenCV
📌 Этот код демонстрирует работу с изображениями с помощью OpenCV: загрузка, преобразование в градации серого и обнаружение границ. Эти операции полезны для задач компьютерного зрения, таких как распознавание объектов или улучшение изображений для анализа.
🛠 Установите OpenCV с помощью:
🔍 Применяйте этот код в своих проектах для обработки изображений.
Подпишись 👉🏻 @KodduuPython 🤖
import cv2
import numpy as np
def apply_grayscale_and_edges(image_path: str):
# Загрузка изображения
image = cv2.imread(image_path)
if image is None:
raise FileNotFoundError(f"Не удалось загрузить изображение: {image_path}")
# Преобразование в градации серого
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Обнаружение границ с помощью Canny
edges = cv2.Canny(gray_image, 100, 200)
# Отображение результатов
cv2.imshow("Grayscale", gray_image)
cv2.imshow("Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Пример использования
image_path = "example.jpg"
try:
apply_grayscale_and_edges(image_path)
except FileNotFoundError as e:
print(e)
📌 Этот код демонстрирует работу с изображениями с помощью OpenCV: загрузка, преобразование в градации серого и обнаружение границ. Эти операции полезны для задач компьютерного зрения, таких как распознавание объектов или улучшение изображений для анализа.
🛠 Установите OpenCV с помощью:
pip install opencv-python-headless🔍 Применяйте этот код в своих проектах для обработки изображений.
Подпишись 👉🏻 @KodduuPython 🤖
🔍 Эффективность использования Generators vs. List Comprehensions в Python
📌 Этот код демонстрирует два подхода к созданию последовательностей в Python: списковые включения и генераторы.
Списковые включения создают списки, занимая память под все элементы сразу, тогда как генераторы создают элементы по мере необходимости, экономя память.
Генераторы полезны при работе с большими данными, когда важно снижать нагрузку на оперативную память.
Подпишись 👉🏻 @KodduuPython 🤖
def list_comprehension_example(n: int):
return
def generator_example(n: int):
return (x * x for x in range(n))
# Пример использования
if __name__ == "__main__":
n = 10**6
# Использование спискового включения
squares_list = list_comprehension_example(n)
print(f"Сгенерирован список квадратов длиной {len(squares_list)}")
# Использование генератора
squares_generator = generator_example(n)
print("Сгенерирован генератор квадратов")
# Пример итерации по генератору
sum_of_squares = sum(squares_generator)
print(f"Сумма квадратов до {n}: {sum_of_squares}")
📌 Этот код демонстрирует два подхода к созданию последовательностей в Python: списковые включения и генераторы.
Списковые включения создают списки, занимая память под все элементы сразу, тогда как генераторы создают элементы по мере необходимости, экономя память.
Генераторы полезны при работе с большими данными, когда важно снижать нагрузку на оперативную память.
Подпишись 👉🏻 @KodduuPython 🤖
👍2
🔄 Асинхронное программирование vs. многопоточность в Python
📌 Этот код демонстрирует различия между асинхронным программированием и многопоточностью в Python для выполнения сетевых запросов.
Асинхронная функция
в то время как синхронная функция
Оба подхода эффективны для задач ввода-вывода, но выбор между ними зависит от архитектуры приложения и требований к производительности.
Подпишись 👉🏻 @KodduuPython 🤖
import asyncio
import concurrent.futures
import requests
async def fetch_url_async(url: str) -> str:
loop = asyncio.get_event_loop()
with concurrent.futures.ThreadPoolExecutor() as pool:
response = await loop.run_in_executor(pool, requests.get, url)
return response.text
def fetch_url_sync(url: str) -> str:
response = requests.get(url)
return response.text
async def main():
url = "https://www.example.com"
# Асинхронный вызов
async_result = await fetch_url_async(url)
print("Асинхронный результат получен")
# Синхронный вызов
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(fetch_url_sync, url)
sync_result = future.result()
print("Синхронный результат получен")
if __name__ == "__main__":
asyncio.run(main())
📌 Этот код демонстрирует различия между асинхронным программированием и многопоточностью в Python для выполнения сетевых запросов.
Асинхронная функция
fetch_url_async использует asyncio и ThreadPoolExecutor для выполнения запросов без блокировки основного потока,в то время как синхронная функция
fetch_url_sync выполняет их в отдельном потоке. Оба подхода эффективны для задач ввода-вывода, но выбор между ними зависит от архитектуры приложения и требований к производительности.
Подпишись 👉🏻 @KodduuPython 🤖
⚡2
💡 Генераторы vs. Списочные включения: Эффективная обработка данных
📌 Использование генераторов позволяет обрабатывать большие файлы без значительного потребления памяти. Этот код открывает файл и читает его по одной строке, проверяя наличие слова 'Python'.
Это особенно полезно для работы с большими файлами, где списочные включения могли бы привести к избыточному потреблению памяти.
Подпишись 👉🏻 @KodduuPython 🤖
def process_large_file(file_path: str) -> int:
"""Считает количество строк, содержащих слово 'Python' в большом файле."""
count = 0
try:
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
if 'Python' in line:
count += 1
except FileNotFoundError:
print(f"Файл {file_path} не найден.")
except Exception as error:
print(f"Произошла ошибка: {error}")
return count
# Пример использования
file_path = 'large_text_file.txt'
python_count = process_large_file(file_path)
print(f"Количество строк с 'Python': {python_count}")
📌 Использование генераторов позволяет обрабатывать большие файлы без значительного потребления памяти. Этот код открывает файл и читает его по одной строке, проверяя наличие слова 'Python'.
Это особенно полезно для работы с большими файлами, где списочные включения могли бы привести к избыточному потреблению памяти.
Подпишись 👉🏻 @KodduuPython 🤖
👍2
🛠️ Автоматизация тестирования API с Pytest и Requests
📌 Этот код демонстрирует, как использовать Pytest и Requests для автоматизации тестирования API. Он включает тесты для операций GET, POST, PUT и DELETE, что позволяет убедиться в корректной работе вашего API. Эти тесты могут быть интегрированы в CI/CD процессы, чтобы автоматически проверять API при каждом обновлении кода.
Подпишись 👉🏻 @KodduuPython 🤖
import requests
import pytest
BASE_URL = "https://jsonplaceholder.typicode.com"
def test_get_post():
response = requests.get(f"{BASE_URL}/posts/1")
assert response.status_code == 200
assert response.json()["id"] == 1
def test_create_post():
new_post = {"title": "foo", "body": "bar", "userId": 1}
response = requests.post(f"{BASE_URL}/posts", json=new_post)
assert response.status_code == 201
assert response.json()["title"] == new_post["title"]
def test_update_post():
updated_data = {"title": "foobar"}
response = requests.put(f"{BASE_URL}/posts/1", json=updated_data)
assert response.status_code == 200
assert response.json()["title"] == updated_data["title"]
def test_delete_post():
response = requests.delete(f"{BASE_URL}/posts/1")
assert response.status_code == 200
if __name__ == "__main__":
pytest.main()
📌 Этот код демонстрирует, как использовать Pytest и Requests для автоматизации тестирования API. Он включает тесты для операций GET, POST, PUT и DELETE, что позволяет убедиться в корректной работе вашего API. Эти тесты могут быть интегрированы в CI/CD процессы, чтобы автоматически проверять API при каждом обновлении кода.
Подпишись 👉🏻 @KodduuPython 🤖
🔍 Автоматизированная система мониторинга веб-сайтов с BeautifulSoup и Selenium
📌 Этот код демонстрирует, как автоматически отслеживать изменения на веб-сайте, используя BeautifulSoup для парсинга HTML и Selenium для управления браузером. Система периодически проверяет заголовок страницы и уведомляет о любых изменениях. Это может быть полезно для мониторинга изменений на важных веб-ресурсах и своевременного реагирования на них.
🛠 pip install beautifulsoup4 selenium requests
💡 Не забудьте скачать и указать путь к
Подпишись 👉🏻 @KodduuPython 🤖
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import requests
import time
def get_page_content(url: str) -> str:
try:
response = requests.get(url)
response.raise_for_status()
return response.text
except requests.RequestException as e:
print(f"Ошибка при получении содержимого страницы: {e}")
return ""
def parse_content(html: str) -> str:
soup = BeautifulSoup(html, 'html.parser')
title = soup.find('title').text if soup.find('title') else 'Заголовок не найден'
return title
def monitor_website(url: str, check_interval: int):
content = get_page_content(url)
current_title = parse_content(content)
print(f"Начальный заголовок: {current_title}")
options = Options()
options.headless = True
service = Service('/path/to/chromedriver')
driver = webdriver.Chrome(service=service, options=options)
driver.get(url)
try:
while True:
driver.refresh()
new_content = driver.page_source
new_title = parse_content(new_content)
if new_title != current_title:
print(f"Содержание сайта изменилось! Новый заголовок: {new_title}")
current_title = new_title
time.sleep(check_interval)
except Exception as e:
print(f"Ошибка во время мониторинга: {e}")
finally:
driver.quit()
# Пример использования
monitor_website("https://example.com", check_interval=60)
📌 Этот код демонстрирует, как автоматически отслеживать изменения на веб-сайте, используя BeautifulSoup для парсинга HTML и Selenium для управления браузером. Система периодически проверяет заголовок страницы и уведомляет о любых изменениях. Это может быть полезно для мониторинга изменений на важных веб-ресурсах и своевременного реагирования на них.
🛠 pip install beautifulsoup4 selenium requests
💡 Не забудьте скачать и указать путь к
chromedriver для корректной работы Selenium.Подпишись 👉🏻 @KodduuPython 🤖
👍2
📄 Автоматизация обработки документов с использованием PyPDF2
📌 Этот код показывает, как объединять несколько PDF-документов в один с помощью библиотеки PyPDF2. Он создает новый PDF-файл, содержащий все страницы из указанных документов. Это может быть полезно для автоматизации обработки документов в юридических фирмах или других учреждениях, где часто требуется объединять PDF-файлы.
Подпишись 👉🏻 @KodduuPython 🤖
import PyPDF2
def merge_pdfs(pdf_list, output_path):
pdf_writer = PyPDF2.PdfWriter()
for pdf_file in pdf_list:
try:
with open(pdf_file, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
for page in range(len(pdf_reader.pages)):
pdf_writer.add_page(pdf_reader.pages)
except Exception as e:
print(f"Ошибка при чтении {pdf_file}: {e}")
try:
with open(output_path, 'wb') as output_pdf:
pdf_writer.write(output_pdf)
print(f"Объединенный PDF сохранен как {output_path}")
except Exception as e:
print(f"Ошибка при записи объединенного PDF: {e}")
# Пример использования
pdf_files = ["document1.pdf", "document2.pdf"]
merge_pdfs(pdf_files, "merged_document.pdf")
📌 Этот код показывает, как объединять несколько PDF-документов в один с помощью библиотеки PyPDF2. Он создает новый PDF-файл, содержащий все страницы из указанных документов. Это может быть полезно для автоматизации обработки документов в юридических фирмах или других учреждениях, где часто требуется объединять PDF-файлы.
Подпишись 👉🏻 @KodduuPython 🤖
🕸️ Автоматизация сбора данных с веб-форм с помощью Selenium
📌 Этот код демонстрирует, как использовать Selenium для автоматизации заполнения и отправки веб-формы. Он открывает страницу, заполняет поля формы данными из
Подпишись 👉🏻 @KodduuPython 🤖
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
def setup_driver():
chrome_options = Options()
chrome_options.add_argument("--headless") # Запуск браузера в режиме без интерфейса
service = Service(executable_path='path/to/chromedriver')
driver = webdriver.Chrome(service=service, options=chrome_options)
return driver
def fill_form_and_submit(url, form_data):
driver = setup_driver()
try:
driver.get(url)
for field_id, value in form_data.items():
element = driver.find_element(By.ID, field_id)
element.clear() # Очистка существующего текста в поле
element.send_keys(value) # Ввод нового текста
submit_button = driver.find_element(By.ID, "submit")
submit_button.click()
time.sleep(3) # Ожидание загрузки страницы
return driver.page_source
except Exception as e:
print(f"Ошибка при отправке формы: {e}")
finally:
driver.quit()
# Пример использования
url = "http://example.com/form"
form_data = {
"name": "John Doe",
"email": "john.doe@example.com",
"message": "Hello, this is a test message!"
}
response = fill_form_and_submit(url, form_data)
print(response[:500]) # Вывод первых 500 символов HTML страницы
📌 Этот код демонстрирует, как использовать Selenium для автоматизации заполнения и отправки веб-формы. Он открывает страницу, заполняет поля формы данными из
form_data и отправляет форму. Это полезно для маркетинговых исследований или автоматического тестирования веб-приложений.Подпишись 👉🏻 @KodduuPython 🤖
👉 Ключевой бесплатный курс для разминки мозга 🤯 и понимания как работает компьютер 💻
Подпишись 👉🏻 @KodduuPython 🤖
Подпишись 👉🏻 @KodduuPython 🤖
🔥2❤1
📊 Управление задачами с Celery
📌 Этот код демонстрирует, как использовать Celery для создания и управления асинхронными задачами в Python-приложениях. Он содержит функцию для отправки email, которая может выполняться в фоновом режиме, освобождая основной поток приложения для других операций. Это полезно для создания масштабируемых веб-приложений, где требуется выполнение задач в реальном времени.
Подпишись 👉🏻 @KodduuPython 🤖
from celery import Celery
# Создание приложения Celery
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def send_email(recipient: str, subject: str, body: str) -> str:
# Имитация отправки email
print(f"Отправка email на {recipient} с темой '{subject}'")
return "Email отправлен!"
# Пример использования
if __name__ == "__main__":
result_email = send_email.delay("example@example.com", "Hello!", "Это тестовое сообщение.")
print(result_email.get(timeout=10))
📌 Этот код демонстрирует, как использовать Celery для создания и управления асинхронными задачами в Python-приложениях. Он содержит функцию для отправки email, которая может выполняться в фоновом режиме, освобождая основной поток приложения для других операций. Это полезно для создания масштабируемых веб-приложений, где требуется выполнение задач в реальном времени.
Подпишись 👉🏻 @KodduuPython 🤖
🔍 Автоматизация тестирования с Pytest
# Запуск тестов командой: pytest имя_файла.py
📌 Данный код демонстрирует основы использования Pytest для автоматизации тестирования функций в Python. Он включает тесты для функции сложения и пример параметризации тестов для проверки различных входных данных. Это полезно для повышения качества вашего кода и обеспечения его стабильности при изменениях.
🛠 Для начала работы установите Pytest с помощью: pip install pytest.
Подпишись 👉🏻 @KodduuPython 🤖
import pytest
# Функция для тестирования
def add(a: int, b: int) -> int:
return a + b
# Тестовая функция
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
assert add(0, 0) == 0
# Параметризация тестов
@pytest.mark.parametrize("a, b, expected", [
(1, 1, 2),
(-1, -1, -2),
(100, 200, 300),
])
def test_add_parametrized(a, b, expected):
assert add(a, b) == expected
# Запуск тестов командой: pytest имя_файла.py
📌 Данный код демонстрирует основы использования Pytest для автоматизации тестирования функций в Python. Он включает тесты для функции сложения и пример параметризации тестов для проверки различных входных данных. Это полезно для повышения качества вашего кода и обеспечения его стабильности при изменениях.
🛠 Для начала работы установите Pytest с помощью: pip install pytest.
Подпишись 👉🏻 @KodduuPython 🤖
🔍 Увеличение производительности с Dask
📌 Этот код демонстрирует, как использовать Dask для обработки больших CSV-файлов, выполняя группировки и агрегации. Dask позволяет обрабатывать данные, которые не помещаются в память, распределяя задачи и улучшая производительность по сравнению с Pandas. Это полезно при работе с большими наборами данных в аналитических и научных приложениях.
Подпишись 👉🏻 @KodduuPython 🤖
import dask.dataframe as dd
import pandas as pd
def process_large_csv(file_path: str, column: str) -> pd.Series:
try:
# Чтение большого CSV-файла с помощью Dask
ddf = dd.read_csv(file_path)
# Выполнение операции группировки и агрегации
result = ddf.groupby(column).size().compute()
return result
except Exception as e:
print(f"Ошибка обработки файла: {e}")
return pd.Series()
# Пример использования
if __name__ == "__main__":
file_path = 'large_data.csv'
column = 'category'
result = process_large_csv(file_path, column)
print(result)
📌 Этот код демонстрирует, как использовать Dask для обработки больших CSV-файлов, выполняя группировки и агрегации. Dask позволяет обрабатывать данные, которые не помещаются в память, распределяя задачи и улучшая производительность по сравнению с Pandas. Это полезно при работе с большими наборами данных в аналитических и научных приложениях.
🛠 pip install dask pandas
Подпишись 👉🏻 @KodduuPython 🤖
🔍 Асинхронный веб-скрейпинг с Aiohttp и BeautifulSoup
📌 Этот код выполняет асинхронный веб-скрейпинг, извлекая заголовки страниц с заданных URL. Используя aiohttp для асинхронных HTTP-запросов и BeautifulSoup для парсинга HTML, он эффективно обрабатывает множество страниц одновременно. Этот подход особенно полезен для обработки больших объемов данных без блокировки выполнения программы.
Подпишись 👉🏻 @KodduuPython 🤖
import aiohttp
import asyncio
from bs4 import BeautifulSoup
async def fetch(session, url):
async with session.get(url) as response:
if response.status == 200:
html = await response.text()
# Парсинг HTML для извлечения заголовка
soup = BeautifulSoup(html, 'html.parser')
title = soup.title.string if soup.title else 'No Title Found'
return title
else:
raise Exception(f"Ошибка при получении {url}: статус {response.status}")
async def main(urls):
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
titles = await asyncio.gather(*tasks, return_exceptions=True)
return titles
# Пример использования
urls = ['https://www.python.org', 'https://www.example.com']
titles = asyncio.run(main(urls))
print(titles)
📌 Этот код выполняет асинхронный веб-скрейпинг, извлекая заголовки страниц с заданных URL. Используя aiohttp для асинхронных HTTP-запросов и BeautifulSoup для парсинга HTML, он эффективно обрабатывает множество страниц одновременно. Этот подход особенно полезен для обработки больших объемов данных без блокировки выполнения программы.
Подпишись 👉🏻 @KodduuPython 🤖
Python.org
Welcome to Python.org
The official home of the Python Programming Language
🖼️ Простая обработка изображений с PIL и OpenCV
📌 Этот код демонстрирует, как использовать библиотеки PIL и OpenCV для базовой обработки изображений: размытие, преобразование в градации серого и выделение контуров. Это полезно для создания приложений, которые требуют предварительной обработки изображений, например, в компьютерном зрении или при подготовке данных для машинного обучения.
Подпишись 👉🏻 @KodduuPython 🤖
from PIL import Image, ImageFilter
import cv2
import numpy as np
def process_image(image_path: str, output_path: str):
try:
# Открываем изображение с помощью PIL
pil_image = Image.open(image_path)
# Применяем размытие
blurred_image = pil_image.filter(ImageFilter.BLUR)
# Сохраняем результат
blurred_image.save(output_path)
# Чтение изображения с помощью OpenCV
cv_image = cv2.imread(output_path)
# Конвертируем в градации серого
gray_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY)
# Применяем детектор границ Canny
edges = cv2.Canny(gray_image, 100, 200)
# Сохраняем изображение с границами
cv2.imwrite(output_path.replace('.jpg', '_edges.jpg'), edges)
except Exception as e:
print(f"Ошибка обработки изображения: {e}")
# Пример использования
process_image('input.jpg', 'output.jpg')
📌 Этот код демонстрирует, как использовать библиотеки PIL и OpenCV для базовой обработки изображений: размытие, преобразование в градации серого и выделение контуров. Это полезно для создания приложений, которые требуют предварительной обработки изображений, например, в компьютерном зрении или при подготовке данных для машинного обучения.
🛠 pip install pillow opencv-python-headless
Подпишись 👉🏻 @KodduuPython 🤖
🤔3
🛠️ Быстрое RESTful API с FastAPI
# Пример использования:
# 1. Запустите сервер:
# 2. Посетите
📌 Этот код демонстрирует создание простого RESTful API с использованием FastAPI. API позволяет получать список элементов, искать элемент по ID и добавлять новые элементы с уникальными ID. FastAPI обеспечивает быструю разработку и безопасность API благодаря встроенной валидации и асинхронному выполнению.
Подпишись 👉🏻 @KodduuPython 🤖
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional
app = FastAPI()
class Item(BaseModel):
id: int
name: str
description: Optional[str] = None # Описание элемента
# Пример данных
items_db = [
{"id": 1, "name": "item1", "description": "Описание первого элемента"},
{"id": 2, "name": "item2", "description": "Описание второго элемента"},
]
@app.get("/items/", response_model=List[Item])
async def read_items():
return items_db
@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: int):
for item in items_db:
if item["id"] == item_id:
return item
raise HTTPException(status_code=404, detail="Элемент не найден")
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
for existing_item in items_db:
if existing_item["id"] == item.id:
raise HTTPException(status_code=400, detail="ID уже существует")
items_db.append(item.dict())
return item
# Пример использования:
# 1. Запустите сервер:
uvicorn filename:app --reload# 2. Посетите
http://127.0.0.1:8000/items/ для просмотра всех элементов📌 Этот код демонстрирует создание простого RESTful API с использованием FastAPI. API позволяет получать список элементов, искать элемент по ID и добавлять новые элементы с уникальными ID. FastAPI обеспечивает быструю разработку и безопасность API благодаря встроенной валидации и асинхронному выполнению.
Подпишись 👉🏻 @KodduuPython 🤖
📊 Простая агрегация данных с Pandas
📌 Этот код выполняет агрегацию данных о продажах, суммируя их по месяцам из CSV-файла. Используется библиотека Pandas для загрузки и обработки данных. Это часто применяется в бизнес-аналитике для ежемесячных отчетов.
Подпишись 👉🏻 @KodduuPython 🤖
import pandas as pd
def aggregate_sales_data(file_path: str) -> pd.DataFrame:
try:
data = pd.read_csv(file_path, parse_dates=['Date'])
# Группировка данных по месяцам и суммирование продаж
monthly_sales = (
data.groupby(data['Date'].dt.to_period('M'))
.agg(total_sales=('Sales', 'sum'))
.reset_index()
)
return monthly_sales
except FileNotFoundError:
print("Файл не найден. Проверьте путь к файлу.")
return pd.DataFrame()
except Exception as e:
print(f"Произошла ошибка: {e}")
return pd.DataFrame()
# Пример использования
file_path = 'sales_data.csv'
monthly_sales = aggregate_sales_data(file_path)
print(monthly_sales)
📌 Этот код выполняет агрегацию данных о продажах, суммируя их по месяцам из CSV-файла. Используется библиотека Pandas для загрузки и обработки данных. Это часто применяется в бизнес-аналитике для ежемесячных отчетов.
Подпишись 👉🏻 @KodduuPython 🤖
* С новым годом *
Подпишись 👉🏻 @KodduuPython 🤖
import os
import time
import random
WIDTH = 80
HEIGHT = 20
# ASCII-art цифр (5 строк)
DIGITS = {
"0": [
" █████ ",
" █ █ ",
" █ █ ",
" █ █ ",
" █████ "
],
"2": [
" █████ ",
" █ ",
" █████ ",
" █ ",
" █████ "
],
"6": [
" █████ ",
" █ ",
" █████ ",
" █ █ ",
" █████ "
]
}
# собрать строку 2026
def get_2026_art():
art_lines = [""] * 5
for digit in "2026":
for i in range(5):
art_lines[i] += DIGITS[digit][i] + " "
return art_lines
# создаем пустое поле для снега
def init_snow():
return [[random.choice([False, True, False, False, False]) for _ in range(WIDTH)] for _ in range(HEIGHT)]
# обновление позиции снега
def update_snow(snow):
new_snow = [[False]*WIDTH for _ in range(HEIGHT)]
for y in range(HEIGHT-1):
for x in range(WIDTH):
if snow[y][x]:
new_y = y + 1
if new_y < HEIGHT:
new_snow[new_y][x] = True
# случайные новые снежинки сверху
for x in range(WIDTH):
if random.random() < 0.02:
new_snow[0][x] = True
return new_snow
# отрисовка
def draw(snow, art):
canvas = [[" "] * WIDTH for _ in range(HEIGHT)]
# рисуем снег
for y in range(HEIGHT):
for x in range(WIDTH):
if snow[y][x]:
canvas[y][x] = "*"
# рисуем 2026 примерно в центре
start_x = (WIDTH - len(art[0])) // 2
start_y = 5
for i, line in enumerate(art):
for j, c in enumerate(line):
if c != " " and 0 <= start_y+i < HEIGHT and 0 <= start_x+j < WIDTH:
canvas[start_y + i][start_x + j] = c
return "\n".join("".join(row) for row in canvas)
def clear():
os.system("cls" if os.name == "nt" else "clear")
# main loop
snow = init_snow()
art = get_2026_art()
while True:
clear()
print(draw(snow, art))
snow = update_snow(snow)
time.sleep(0.1)
Подпишись 👉🏻 @KodduuPython 🤖
👀2