Kodduu Python
1.07K subscribers
318 photos
28 videos
192 links
Научись программировать на Python на интересных примерах

Самый быстрый курс https://stepik.org/a/187914
Самый нескучный курс https://stepik.org/a/185238

Во вопросам сотрудничества: @AlexErf
Download Telegram
🔄 Асинхронное программирование vs. многопоточность в Python


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. Списочные включения: Эффективная обработка данных


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


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


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


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


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 🤖
1🔥1