Python/ django
64.8K subscribers
2.22K photos
115 videos
48 files
2.95K links
по всем вопросам @haarrp

@itchannels_telegram - 🔥 все ит-каналы

@ai_machinelearning_big_data -ML

@ArtificialIntelligencedl -AI

@datascienceiot - 📚

@pythonlbooks

РКН: clck.ru/3FmxmM
Download Telegram
🐍 Простые фишки парсинга в Python

1️⃣ Парсинг больших JSON-файлов без загрузки в память

import ijson

with open("big.json", "r") as f:
for item in ijson.items(f, "records.item"):
print(item) # потоковый парсинг, не держим всё в памяти


2️⃣ HTML-парсинг с поддержкой XPath через lxml


from lxml import html

doc = html.fromstring("<div><span>Hello</span></div>")
print(doc.xpath("//span/text()")[0]) # Hello


3️⃣ Парсинг логов с регулярками и именованными группами


import re

line = '2025-08-23 12:10:45 [INFO] User=egor Action=login'
pattern = r'(?P<date>\d{4}-\d{2}-\d{2}) .* User=(?P<user>\w+) Action=(?P<action>\w+)'
m = re.search(pattern, line)
print(m.groupdict())
# {'date': '2025-08-23', 'user': 'egor', 'action': 'login'}


4️⃣ Парсинг YAML c поддержкой типов


import yaml

data = yaml.safe_load("""
user: egor
active: true
age: 30
""")
print(data) # {'user': 'egor', 'active': True, 'age': 30}

5️⃣ Парсинг бинарных данных (struct)



import struct

raw = b"\x01\x00\x00\x00\x2A\x00"
id, value = struct.unpack("<iH", raw)
print(id, value) # 1 42

6️⃣ Парсинг HTML-таблиц напрямую в DataFrame (pandas)



import pandas as pd

url = "https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)"
tables = pd.read_html(url)
print(tables[0].head()) # первая таблица со страницы


🔥 Эти методы позволяют эффективно парсить большие JSON, бинарные форматы, HTML с XPath, YAML и даже таблицы прямо в pandas.
Используйте их, если обычных инструментов уже не хватает.
🔥1610👍5
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Python: склейка TCP-пакетов

Когда отправляешь ты в сокет много маленьких кусочков - уходит куча мелких TCP-пакетов это работает медленнее и с задержками.

Решение: склеивай данные и отправляй одним блоком.

На Linux можно сказать ядру «подожди, я ещё допишу» команда MSG MORE.

Итог: меньше пакетов, быстрее отклик.


python


import socket

def send_coalesced(sock, parts):
for chunk in parts[:-1]:
sock.sendall(chunk, socket.MSG_MORE)
sock.sendall(parts[-1]) финальный flush

#Вот короткий пример как делать «плохо» и «хорошо»:

import socket

sock = socket.create_connection(("localhost", 9090))

# Плохо: много маленьких пакетов
sock.sendall(b"Hello, ")
sock.sendall(b"world")
sock.sendall(b"!\n")

# Хорошо: склеили всё и отправили одним пакетом

msg = b"".join([b"Hello, ", b"world", b"!\n"])
sock.sendall(msg)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥169👍4
Хотите вкатиться в ML или DS с нуля?

Сегодня стартует курс «Machine Learning. Basic» от OTUS! Это обучение — ваш шанс овладеть востребованными навыками и начать карьеру в области, которая меняет мир технологий. На курсе вы:

- Освоите Python для Data Science с нуля до профессионального уровня.
- Научитесь работать с ML-библиотеками: pandas, numpy, sklearn, и применять их для решения реальных задач.
- Освоите A/B-тестирование
- Научитесь решать реальные бизнес-задачи при помощи методов машинного обучения от задач классификации до ансамблей моделей

➡️ Осталось совсем немного времени, присоединяйтесь к курсу. Успейте по максимально выгодной цене месяца + примените дополнительный промокод ML_BASIC_5: https://tglink.io/4a60da8557a0?erid=2W5zFK8RwzG

#реклама
О рекламодателе
This media is not supported in your browser
VIEW IN TELEGRAM
🐍 Малоизвестный совет по Python: используй pyparsing вместо громоздких и тяжёлых regex.

Обычно все пишут через модуль re и собирают гигантские регулярки, которые сложно читать и отлаживать. Но есть библиотека pyparsing, где можно строить парсер как из конструктора — из простых правил.

Главная фишка: если в одном месте разбор сломался, pyparsing пробует другие варианты, а не падает. Это делает его удобным инструментом для разбора конфигов, мини-языков и любых сложных форматов текста, где regex становится болью.


from pyparsing import Word, alphas, nums, Group, OneOrMore

# Определим правило: слово + число
identifier = Word(alphas) + Word(nums)

# Парсер будет читать такие пары подряд
parser = OneOrMore(Group(identifier))

result = parser.parseString("user123 order456 item789")
print(result.asList())

# output:
🔥54👍2