fa
Feedback
Python для начинающих

Python для начинающих

رفتن به کانال در Telegram

Python для начинающих

نمایش بیشتر
1 240
مشترکین
+124 ساعت
+37 روز
+230 روز
آرشیو پست ها
- Как безопасно работать с конфиденциальными данными в Python
- Как безопасно работать с конфиденциальными данными в Python

Привет! На связи Иван, и сегодня разберём один из мощных инструментов для работы с XML и HTML — библиотеку lxml. Если вы когда-либо сталкивались с необходимостью "разобрать" XML-файл или вытянуть кусочек информации из HTML, lxml сделает это за считанные строки кода. Давайте посмотрим, как работает синтаксический анализ и построение деревьев с этим модулем на практике. ## Загрузка и структура XML Для начала представим классический XML:
<data>
  <user id="1">
    <name>John</name>
    <age>30</age>
  </user>
  <user id="2">
    <name>Ann</name>
    <age>25</age>
  </user>
</data>
С помощью lxml превратить этот текст в дерево проще простого:
from lxml import etree

xml_text = '''
<data>
  <user id="1">
    <name>John</name>
    <age>30</age>
  </user>
  <user id="2">
    <name>Ann</name>
    <age>25</age>
  </user>
</data>
'''

root = etree.fromstring(xml_text)
Теперь root — вершина дерева, а каждый "user" — его потомок. Посмотреть, кто есть кто:
for user in root.findall("user"):
    print(user.get("id"), user.findtext("name"))
Вывод будет:
1 John  
2 Ann
## Парсинг HTML и XPath Работает lxml и с HTML! Очень удобно, если нужно вытащить ссылки или заголовки со странички.
from lxml import html

html_text = '''
<html>
  <body>
    <h2>Cool title</h2>
    <a href="https://example.com">Read more</a>
  </body>
</html>
'''

tree = html.fromstring(html_text)
link = tree.xpath('//a/@href')[0]
title = tree.xpath('//h2/text()')[0]
print(title, link)
## Зачем всё это? lxml крут тем, что строит дерево элементов: вы можете свободно перемещаться по структуре, менять значения, добавлять или удалять узлы. XPath — как навигация по дереву на стероидах: за одну строку можно вытянуть вообще всё, что душе угодно. В результате: lxml незаменим, когда появляется задача парсить XML или HTML, вытаскивать данные, модифицировать структуру, или даже генерировать новые файлы. Всего три-четыре строки кода — и у вас весь документ, как на ладони.

- Основы синтаксического анализа и построения деревьев с lxml
- Основы синтаксического анализа и построения деревьев с lxml

Привет! С вами Иван и сегодня поговорим о настоящей магии — модуле mmap в Python. Все мы привыкли работать с файлами по-старинке: открыли, прочитали в память, закрыли. Но что если файл огромный, а нам нужно обработать только его часть? Пожалуй, тут на сцену выходит герой дня — mmap. ## Что такое mmap и зачем он нужен? mmap позволяет отображать файл в память и работать с ним как с обычным массивом байтов. Это особенно круто при работе с большими файлами, когда нет смысла тратить память на всё содержимое сразу. Всё, что тебе нужно — доступно по байтовому адресу! ## Пример 1: Чтение кусочка огромного файла Допустим, у нас есть гигантский лог-файл, а мы хотим прочитать только первые 100 байт.
import mmap

with open('huge.log', 'rb') as f:
    with mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ) as mm:
        snippet = mm[:100]
        print(snippet.decode('utf-8', errors='ignore'))
Здесь мы не загружаем весь файл в память, а просто работаем с окном нужного размера. Удобно и быстро! ## Пример 2: Поиск без загрузки файла А если нужен поиск по файлу? Смотри, как просто ищется подстрока:
import mmap

search_phrase = b'ERROR'

with open('huge.log', 'rb') as f:
    with mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ) as mm:
        pos = mm.find(search_phrase)
        if pos != -1:
            print(f'Found at position {pos}')
Как в строке, только по файлу, и всё ― без лишней траты памяти. ## Пример 3: Редактирование файла на месте mmap позволяет даже изменять файлы на лету. Например, заменить первые 5 байт на другие:
import mmap

with open('data.bin', 'r+b') as f:
    with mmap.mmap(f.fileno(), length=0) as mm:
        mm[0:5] = b'HELLO'
Изменения сразу отражаются в файле! ## Итог mmap станет отличным подспорьем, если вы хотите ускорить работу с файлами, не жертвуя оперативной памятью. Работать с файлами становится действительно удобно ― вы просто манипулируете данными как с массивом, и всё прозрачно сохраняется на диск. Обязательно попробуйте в своих проектах! — Иван, ваш проводник в мир эффективного Python

- Как использовать модуль mmap для оптимизации ввода-вывода
- Как использовать модуль mmap для оптимизации ввода-вывода

Привет, на связи Иван! Сегодня расскажу о двух хитрых помощниках Python — модулях shutil и os, которые превращают скучную работу с файлами и папками в настоящее шоу. Узнаем, как быстро манипулировать файлами, автоматизировать рутину и не бояться "переезда" данных. ### Модуль os: база для маневров Модуль os — это как швейцарский нож для работы с файловой системой. С его помощью можно узнать, какие файлы лежат в папке, создать каталоги и даже выяснить, в какой именно папке сейчас "живет" скрипт.
import os

current_dir = os.getcwd()   # Текущая рабочая директория
files = os.listdir(current_dir)  # Список файлов в папке
os.mkdir('new_folder')  # Создаём новую папку
os.rename('file.txt', 'renamed_file.txt')  # Переименование файла
Секрет №1: всегда проверяйте существование файлов и папок перед операциями! Это спасёт от ненужных ошибок.
if not os.path.exists('new_folder'):
    os.mkdir('new_folder')
### Модуль shutil: мастер “телепортации” данных Когда нужно не просто узнать, а двигать файлы или целые каталоги, приходит время shutil. Этот модуль умеет копировать, переносить и удалять данные, и делает это красиво и безопасно.
import shutil

shutil.copy('data.txt', 'backup/data.txt')  # Копируем файл
shutil.move('backup/data.txt', 'archive/data.txt')  # Перемещаем файл
shutil.rmtree('archive')  # Удаляем целую папку cо всеми файлами!
Секрет №2: Используйте shutil.copytree() для копирования целых каталогов, а ещё — можно фильтровать, какие файлы копировать!
def ignore_txt_files(dir, files):
    return [f for f in files if f.endswith('.txt')]

shutil.copytree('original', 'copy', ignore=ignore_txt_files)
### Combo: автоматизация на максимум Комбинируя os и shutil, можно создать свои файловые менеджеры или скрипты для бэкапа. Например, копировать все файлы с определённым расширением:
import os
import shutil

for filename in os.listdir('docs'):
    if filename.endswith('.pdf'):
        shutil.copy(os.path.join('docs', filename), 'pdf_backup')
### Итог shutil и os — тандем для любой работы с файлами и папками. Запомните ключевые методы, всегда проверяйте операции на существование объектов и пробуйте писать автоматизации под себя! Всегда рад делиться секретами продуктивной работы на Python — до новых встреч, ваш Иван.

- Секреты эффективной работы с модулями shutil и os
- Секреты эффективной работы с модулями shutil и os

Привет! С вами Иван, и сегодня мы окунемся в магию живых, мгновенных соединений с помощью WebSocket и Python. Когда слышишь слово “бот”, сразу представляешь автоматизацию рутины: рассылки, ответы, акции. Но большинство таких ботов работает с HTTP-запросами — обычными односторонними сообщениями. А что если нужен живой диалог, например, чат-бот или отслеживание биржевых цен в режиме реального времени? Вот тут и появляется герой сегодняшнего выпуска — протокол WebSocket! WebSocket — это двустороннее соединение: клиент и сервер могут отправлять данные друг другу как только захотят. И Python готов работать с этим напрямую через библиотеку websockets. ### Первый пример: клиент на WebSocket Допустим, у нас есть сервер, который шлет случайное число раз в секунду. Вот как подключиться к нему:
import asyncio
import websockets

async def listen():
    uri = "ws://localhost:8765"
    async with websockets.connect(uri) as websocket:
        while True:
            message = await websocket.recv()
            print(f"Received: {message}")

asyncio.run(listen())
Всего несколько строк — и вы уже получаете данные в реальном времени! ### Второй пример: сервер WebSocket на Python Запустить свой сервер тоже просто:
import asyncio
import random
import websockets

async def send_random(websocket):
    while True:
        number = random.randint(1, 100)
        await websocket.send(str(number))
        await asyncio.sleep(1)

async def main():
    async with websockets.serve(send_random, "localhost", 8765):
        await asyncio.Future()  # run forever

asyncio.run(main())
Этот сервер будет каждую секунду отдавать случайное число всем подключившимся. ### Идеи для ботов С помощью WebSocket вы можете сделать: - чат-бота, который отвечает мгновенно, реагируя на каждое сообщение; - сборщика уведомлений из разных систем в одном месте; - монитор трейдов и бирж, чтобы получать апдейты моментально. Используйте WebSocket для ускорения реакции в своих Python-проектах — этот протокол буквально открывает двери в мир мгновенного обмена данными.

- Введение в веб-ботов с протоколом WebSocket и Python
- Введение в веб-ботов с протоколом WebSocket и Python

Привет! Меня зовут Иван, и сегодня мы поговорим о настоящей магии асинхронных задач в Python — модуле Celery. Представьте, что ваш сайт отправляет письма пользователям или обрабатывает тяжелые отчёты. Если выполнять это прямо в запросе пользователя — он уснёт, дожидаясь ответа. А вот если передать дело “отложенному работнику” — всё становится куда быстрее. Именно таким работником и выступает Celery. ## Кратко: что такое Celery? Celery — это распределённый исполнитель задач, написанный на Python. Он позволяет запускать любые функции в фоне, не блокируя основной поток программы. Для работы ему потребуется брокер сообщений, например, Redis или RabbitMQ — через них Celery отправляет задачи своим воркерам. ## Первый пример — отправка письма Давайте рассмотрим простой пример. Сначала установим необходимые пакеты:
pip install celery redis
Создадим файл tasks.py:
from celery import Celery

app = Celery('my_tasks', broker='redis://localhost:6379/0')

@app.task
def send_welcome_email(user_email):
    print(f"Sending welcome email to {user_email}")
    # тут могла бы быть интеграция с реальной email-системой
Теперь можно вызвать задачу асинхронно:
# main.py
from tasks import send_welcome_email

send_welcome_email.delay('newuser@example.com')
Функция delay — и есть магия: она “отправляет” задачу воркеру Celery, а не запускает её прямо сейчас. ## Второй пример — продолжительный процессинг Что делать, если вам надо обработать много данных, например, генерировать PDF-отчёты? Запускаем это тоже через Celery!
@app.task
def generate_report(report_id):
    print(f"Generating report {report_id}...")
    # Симуляция долгой работы
    import time
    time.sleep(5)
    print(f"Report {report_id} is ready!")
Теперь задача “варится” в фоне, не мешая пользователям сайта. ## Почему Celery популярен? - Гибкость: задачи могут быть очередями с разными приоритетами. - Масштабируемость: запускайте хоть сотню воркеров — всё заработает. - Мониторинг: Celery легко интегрируется с Flower — инструментом визуального контроля за задачами. Celery — идеальный выбор, если быстрые фокусы уже не спасают, а задачи требуются “класть на потом”. Попробуйте применить его в своих проектах — и код задышит полной грудью!

- Использование celery для отложенных задач и процессинга
- Использование celery для отложенных задач и процессинга

Привет, с вами Иван! Сегодня разберём интересную тему — как написать свой собственный лексический анализатор (lexer) на Python, используя модуль re. Это умение полезно, если вы хотите понять, как работают языки программирования изнутри или написать парсер для небольшого языка. ## Немного теории Лексический анализатор — это инструмент, который разбивает текст на “токены”: числа, идентификаторы, слова, спецсимволы и т.д. Например, строку x = 5 + y лексер превращает в список токенов: имя, знак равно, число, плюс, имя. Модуль re (regular expressions) делает этот процесс максимально простым и лаконичным. ## Делаем свой мини-лексер Рассмотрим пример — напишем лексер для простых арифметических выражений (числа, знаки операций, скобки):
import re

# Описываем типы токенов и шаблоны для них
token_spec = [
    ("NUMBER",    r'\d+(\.\d*)?'),   # целое или дробное число
    ("IDENT",     r'[A-Za-z_]\w*'),  # идентификатор
    ("PLUS",      r'\+'),            # плюс
    ("MINUS",     r'-'),             # минус
    ("MULT",      r'\*'),            # умножение
    ("DIV",       r'/'),             # деление
    ("LPAREN",    r'\('),            # левая скобка
    ("RPAREN",    r'\)'),            # правая скобка
    ("SKIP",      r'[ \t]+'),        # пропускаем пробелы и табы
    ("MISMATCH",  r'.'),             # неизвестный символ — ошибка
]

token_regex = '|'.join(f'(?P<{name}>{pattern})' for name, pattern in token_spec)

def tokenize(code):
    for match in re.finditer(token_regex, code):
        kind = match.lastgroup
        value = match.group()
        if kind == "SKIP":
            continue
        elif kind == "MISMATCH":
            raise RuntimeError(f"Unexpected character: {value}")
        yield (kind, value)
Давайте проверим на практике:
expr = "a1 = 3.5 + (b2 - 7) * 4"
tokens = list(tokenize(expr))
print(tokens)
Результат:
[('IDENT', 'a1'), ('MISMATCH', '='), ('NUMBER', '3.5'), ('PLUS', '+'),
 ('LPAREN', '('), ('IDENT', 'b2'), ('MINUS', '-'), ('NUMBER', '7'),
 ('RPAREN', ')'), ('MULT', '*'), ('NUMBER', '4')]
## Как это работает? - Для каждого токена задаём регулярное выражение. - re.finditer проходит по всей строке, находя совпадения с шаблонами. - Если токен — пробел или таб, пропускаем его. Если неизвестный символ — бросаем ошибку. С помощью такой конструкции вы легко можете добавить новые типы токенов или немного сложнее изменить правила языка. ## Заключение Создавать лексеры на Python просто — достаточно комбинировать немного re и креативности. Это отличный эксперимент для углубления знаний о языках и внутренних механизмах их работы! На связи, Иван.

- Как построить свой лексический анализатор с модулем re
- Как построить свой лексический анализатор с модулем re

Привет, друзья! На связи Иван — сегодня поговорим о магии управления состоянием пользователей в Python с помощью session-объектов. ### Сессии: что это вообще такое? Когда пользователь взаимодействует с веб-приложением, серверу часто нужно "помнить", кто этот пользователь и что он делал минуту назад. Именно в этом случае на сцену выходят session-объекты: они позволяют сохранить состояние между запросами, создавая иллюзию постоянного соединения клиента с сервером. ### Flask и сессии Один из самых простых способов работы с сессиями в Python — использовать микрофреймворк Flask. Здесь сессии реализованы очень удобно:
from flask import Flask, session, redirect, url_for, request

app = Flask(__name__)
app.secret_key = 'super_secret_key'  # Необходима для криптографии!

@app.route('/login', methods=['POST'])
def login():
    user = request.form['username']
    session['username'] = user
    return redirect(url_for('profile'))

@app.route('/profile')
def profile():
    if 'username' in session:
        return f"Hello, {session['username']}!"
    return 'You are not logged in.'

# Для запуска: app.run()
Здесь благодаря session['username'] сохранится имя пользователя, и при следующем запросе сервер быстро узнает, кто к нему пришел. ### Requests и cookies Если вам нужно управлять состоянием не на сервере, а в клиенте (например, писать бота для сайта), пригодится модуль requests. В нем есть Session-объект, который автоматически сохраняет cookies:
import requests

s = requests.Session()
login_payload = {'user': 'bob', 'password': 'qwerty'}
s.post('https://example.com/login', data=login_payload)

resp = s.get('https://example.com/profile')
print(resp.text)  # Профиль Bob'а, если логин успешен!
Сессия позволяет использовать одни и те же cookies для всех запросов, сразу открывая большие возможности для автоматизации. ### На что обратить внимание: - Всегда храните секретные ключи вне кода! - Сессии — не лучший способ хранить крупные объекты или большие объемы данных. - Удалять данные из session можно с помощью session.pop('key', None) или session.clear(). ### Итоги Сессии — это сердце любого сложного веб-приложения: без них ни аутентификацию, ни корзину покупок реализовать не получится. Используйте возможности Flask и requests на полную катушку, не забывая о безопасности. Удачного кодинга!

- Работа с session объектами для управления состоянием пользователей
- Работа с session объектами для управления состоянием пользователей

Привет! С вами Иван, и сегодня мы будем говорить о создании собственной сетевой "классной комнаты" с помощью Python и могучего Jitsi API. Если вы не слышали о Jitsi — это бесплатная и открытая платформа для видеоконференций, которую можно интегрировать в свой проект буквально "на коленке". А ведь сколько возможностей открывается: онлайн-уроки, дистанционные кружки, даже занятия английским по вечерам! Jitsi: Видеозвонки из Python Jitsi не имеет нативного Python SDK, но у него есть REST API и iframe интеграция. Самый простой путь — создавать "комнаты" и управлять ими через web-интерфейс Jitsi Meet, генерируя ссылки через Python. ### Создаём комнату и отправляем приглашение Допустим, вам нужно создать виртуальный класс для учеников:
import random
import string

def generate_room_name(length=10):
    chars = string.ascii_lowercase + string.digits
    return ''.join(random.choices(chars, k=length))

room_name = generate_room_name()
jitsi_url = f"https://meet.jit.si/{room_name}"
print("Classroom link:", jitsi_url)
Этот код генерирует уникальное имя класса и выдаёт ссылку. Осталось только отправить её ученикам — хоть по email, хоть через чат-бота! ### Добавляем управление через API А вот пример запроса к Jitsi Videobridge для получения статистики о комнатах (необходима авторизация):
import requests

server = "https://your-jitsi-server.com"
stats_url = f"{server}/colibri/stats"
response = requests.get(stats_url, auth=('user', 'password'))
print(response.json())
Используя такие запросы, можно отслеживать загруженность сервера: если классов стало слишком много — поднимаем ещё один инстанс. ### Встраиваем Jitsi в веб-приложение Jitsi легко добавляется на сайт через iframe. Python-проекты на Flask или Django могут генерировать HTML-шаблон с вашей уникальной комнатой:
<iframe allow="camera; microphone; fullscreen; display-capture"
        src="https://meet.jit.si/{{ room }}"
        style="height: 500px; width: 100%;"></iframe>
Подставьте в {{ room }} имя, которое сгенерировал ваш Python-скрипт — и ваша собственная видеоклассная комната готова! Вывод: С помощью пары строк Python и мощи Jitsi можно быстро настроить интерактивные уроки, не разбираясь в сложных API и видеостримах. Экспериментируйте, и пусть ваши виртуальные классы всегда будут полны энтузиазма!

- Создание сетевых классных комнат с использованием Jitsi API
- Создание сетевых классных комнат с использованием Jitsi API

Привет! Я Иван, программист, и сегодня расскажу, как можно анализировать и даже кластеризовать текст с помощью Python и магического инструмента — библиотеки scikit-learn (sklearn). Это будет идеальный первый шаг, если вы хотите автоматизировать обработку отзывов, статей или любой другой текстовой информации. ## 1. Векторизация текста Компьютеры любят числа! Нас же интересуют буквы, слова и тексты. Чтобы машинке было понятнее, переводим текст в числовой вид с помощью CountVectorizer или TfidfVectorizer.
from sklearn.feature_extraction.text import TfidfVectorizer

texts = [
    "Python is easy to learn",
    "Python and sklearn are powerful",
    "Data science is fun"
]
vectorizer = TfidfVectorizer()
features = vectorizer.fit_transform(texts)
print(features.shape)  # (3, 8): 3 документа, 8 уникальных слов
Теперь каждый документ — это вектор из чисел, где каждое число отражает важность определенного слова. ## 2. Кластеризация: учим машину находить похожее Допустим, у нас куча текстов, и надо понять — какие из них говорят об одном и том же. Для этого идеально подходит KMeans:
from sklearn.cluster import KMeans

num_clusters = 2
kmeans = KMeans(n_clusters=num_clusters, random_state=42)
kmeans.fit(features)

print(kmeans.labels_)  # Например: [0 0 1]
Каждому тексту присваивается номер кластера — теперь похожие тексты собраны вместе! ## 3. Мини-применение Посмотрим, как распределились наши тексты:
for idx, label in enumerate(kmeans.labels_):
    print(f"Text: '{texts[idx]}' — Cluster: {label}")
Теперь вы знаете, как можно быстро превратить тексты в числа, и даже найти в них скрытые группы! Модули TfidfVectorizer и KMeans — отличный старт для анализа текстов: они просты в использовании, но мощные по возможностям. Творите с Python — и пусть тексты больше не будут "тёмным лесом"!

- Как анализировать и кластеризовать текст с помощью sklearn
- Как анализировать и кластеризовать текст с помощью sklearn

Привет! С вами Иван, и сегодня я расскажу о приемах управления контекстами выполнения в асинхронном Python с помощью asynccontextmanager. Если вы когда-нибудь хотели элегантно управлять ресурсами во время выполнения асинхронного кода, эта тема для вас! ## Немного о контекстах Классический контекстный менеджер (with ...:) позволяет безопасно работать с файлами, сокетами и другими ресурсами. Казалось бы — зачем нам что-то еще? А вот зачем: когда мы ныряем в мир асинхронности (async/await), обычный with становится бесполезен — тут требуется свой асинхронный вариант. ## asynccontextmanager — ваш друг Модуль contextlib из стандартной библиотеки с версии Python 3.7 предлагает декоратор @asynccontextmanager. Он позволяет создавать асинхронные контекстные менеджеры без необходимости писать полноценные классы. ### Пример: асинхронная блокировка Рассмотрим пример, где мы хотим управлять семафором для ограничения числа одновременных задач:
import asyncio
from contextlib import asynccontextmanager

@asynccontextmanager
async def acquire_semaphore(semaphore):
    await semaphore.acquire()
    try:
        yield
    finally:
        semaphore.release()

async def limited_task(semaphore):
    async with acquire_semaphore(semaphore):
        print("Resource acquired")
        await asyncio.sleep(1)
        print("Resource released")

async def main():
    sem = asyncio.Semaphore(2)
    await asyncio.gather(*(limited_task(sem) for _ in range(4)))

asyncio.run(main())
В этом коде мы создали элегантный асинхронный менеджер, который гарантирует освобождение ресурса даже при ошибках. ## Как это работает? - @asynccontextmanager делает функцию генератором с асинхронной поддержкой. - До yield выполняется код инициализации (например, получение блокировки). - После yield — освобождение ресурса (release, закрытие файла, отключение соединения и др.). ### Асинхронные файлы А если нам нужно работать с файлами (например, через aiofiles)? Можно обернуть открытие файла в ваш асинхронный контекст:
import aiofiles
from contextlib import asynccontextmanager

@asynccontextmanager
async def open_async_file(file_path, mode):
    file = await aiofiles.open(file_path, mode)
    try:
        yield file
    finally:
        await file.close()

async def read_file():
    async with open_async_file("example.txt", "r") as f:
        content = await f.read()
        print(content)
## Вывод С помощью @asynccontextmanager вы пишете лаконичный, читаемый и безопасный асинхронный код, не боясь утечек ресурсов даже при возникновении исключений. Попробуйте интегрировать его в свои проекты — и асинхронная жизнь станет проще!

Python для начинающих - آمار و تحلیل کانال تلگرام @pythonvideo