Ghostly Python
9.04K subscribers
535 photos
24 videos
599 links
Погружаемся в мир Python: задачи, фишки, библиотеки и террабайты полезного материала.

Сотрудничество: @heywan_n1

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+IOa15XDNbxRkYzNi
Download Telegram
👩‍💻 Библиотека jsonpath-ng.

jsonpath-ng это Python-библиотека, предназначенная для парсинга и выполнения запросов JSONPath. Она позволяет извлекать данные из сложных, глубоко вложенных JSON-структур с помощью мощных выражений, включающих фильтры, срезы и рекурсивный поиск.

Пример:

from jsonpath_ng import jsonpath, parse

data = {
"users": [
{"name": "Alice", "age": 30, "tags": ["admin", "dev"]},
{"name": "Bob", "age": 20, "tags": ["dev"]},
{"name": "Carol", "age": 25, "tags": []},
]
}

# Все имена пользователей старше 21
expr = parse('$.users[?(@.age > 21)].name')
names = [match.value for match in expr.find(data)]
print(names) # ['Alice', 'Carol']

# Все теги всех пользователей (плоский список)
expr = parse('$.users[*].tags[*]')
tags = [m.value for m in expr.find(data)]
print(tags) # ['admin', 'dev', 'dev']


Плюсы:

🔹 JSONPath обладает мощным синтаксисом, поддерживающим фильтры, рекурсию, срезы и подвыражения.

🔹 Он возвращает совпадения вместе с их путями.

🔹 Инструмент эффективно работает с любыми структурами на основе словарей и списков, такими как ответы API и конфигурационные файлы.


Установка:
pip install jsonpath-ng


👉 GitHub

🐍 Ghostly Python | #фишки
Please open Telegram to view this post
VIEW IN TELEGRAM
6
📱 Фишка: contextlib — удобное создание контекстных менеджеров

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

from contextlib import contextmanager  

@contextmanager
def open_file(path):
f = open(path, 'r')
try:
yield f
finally:
f.close()

with open_file("example.txt") as f:
print(f.read())


📌 Как это работает?

🟢 @contextmanager превращает функцию в контекстный менеджер.
🟢 Всё до yield — выполняется при входе.
🟢 Всё после yield — при выходе из контекста.

🐍 Ghostly Python | #фишки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
Нашел для вас ИИшку, которая будет находить баги в коде.

DeepCode — это AI-инструмент для Python, способный находить сложные баги, недоступные обычным линтерам.

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

DeepCode можно интегрировать в CI/CD: он автоматически проверяет каждое изменение, выявляя критические ошибки (например, утечки памяти, состояния гонки) до их попадания в продакшен.

Установка:
pip install deepcode
deepcode analyze --path ./my_project


👉 Ссылка


🐍 Ghostly Python |#полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥1
🐍 Понятные логи в пайтон - Pretty Pie Log

Pretty Pie Log — это удобная Python-утилита, которая делает логи наглядными, визуализируя их в виде круговых диаграмм.

Она позволяет быстро определить соотношение различных типов сообщений (ошибок, предупреждений, информационных записей) в логах.

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

Установка:
pip install pretty-pie-log.


👉 Статья

🐍 Ghostly Python |#фишки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1🤝1
✔️ Pyrsistent — это Python-библиотека для работы с неизменяемыми данными, предотвращающая случайные модификации.

Она обеспечивает стабильность кода: при изменении объекта создается его новая версия, тогда как исходный остается нетронутым.

Например, при добавлении элемента в pvector (аналог списка) вы получаете новый список, а старый сохраняет первоначальное состояние.

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

👉 Ссылка

🐍 Ghostly Python |#полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁1
🖼️ Библиотека: humanize

humanize — удобная библиотека для преобразования чисел, дат и размеров файлов в человеко-понятный вид. Особенно полезна для вывода информации пользователю.

ℹ️ Основные возможности:

🟢 Преобразование чисел и дат в читаемый формат.
🟢 Вывод размеров файлов в килобайтах, мегабайтах и т.д.
🟢 Отображение времени в стиле "2 часа назад".
🟢 Лёгкая интеграция в любые проекты.

⚙️ Пример использования:

import humanize  
import datetime

print(humanize.intcomma(1234567)) # 1,234,567

size = 1536000
print(humanize.naturalsize(size)) # 1.5 MB

dt = datetime.datetime.now() - datetime.timedelta(hours=3)
print(humanize.naturaltime(dt)) # 3 hours ago


✔️ Установка:

pip install humanize


➡️ Ссылка на документацию

🐍 Ghostly Python | #библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Pandera — мощный инструмент для валидации данных в Python.

Он обеспечивает проверку структуры и содержимого, выступая как дополнительный слой валидации поверх pandas DataFrame и других структур.

✔️ Это позволяет выявлять ошибки на ранних этапах обработки.

Основная задача Pandera — гарантировать соответствие данных ожидаемой схеме, охватывающей типы, диапазоны значений и бизнес-правила.

Установка:
pip install pandera


🐍 Ghostly Python |#полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🐍 python-markdownify — удобный инструмент для конвертации сложной HTML-разметки в чистый и структурированный Markdown.

Идеален для парсинга и миграции сайтов, он избавляет от ручной обработки.

Библиотека легко устанавливается через pip и работает как из Python-кода, так и через командную строку. Она гибко настраивается, позволяя определять правила для тегов, форматировать заголовки, обрабатывать таблицы и изображения.

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

🐍 Ghostly Python |#полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
6
⌨️ Модуль CSV: быстрое создание таблиц

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

На сайте можно найти, как легко импортировать и экспортировать табличные данные, обрабатывать большие объемы информации и избегать распространенных ошибок при работе с CSV.

👉 Статья

🐍 Ghostly Python |#полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
NZT существует.

В фильме «Области тьмы»
герой выпивает NZT — и за день
становится трейдером,
мастером кунг-фу и полиглотом.

Дело не в таблетке.
А в состоянии.

Химия не нужна.
Когда ум чист,
внимание собрано,
и сомнений нет —
ты уже на NZT.

Ты замечаешь всё.
Действуешь без разрывов.
И мир отвечает тебе.

Как включить режим NZT?

Подписывайся на Мэверика.

• входи в состояние
всё «получается само».

• мгновенно принимай
лучшие решения.

• считывай сложные связи
там, где все видят хаос.

• управляй фокусом
и вероятностями событий.

Твоя таблетка NZT.
👇
Мэверик.
Ясность. Точность.
💩101👍1
⚡️ Python-магия: Ускорение парсинга в 60 раз без сложного asyncio

Синхронный парсинг 1000 ссылок занимает около 5 минут.

Переписывать код на чистое asyncio не нужно.

🔹Решение: используйте связку httpx и anyio. httpx поддерживает асинхронный режим, а anyio упрощает параллельные запросы.

httpx умеет работать с синхронным и асинхронным режимом, а anyio под капотом делает параллельные запросы максимально удобными.


import httpx
import anyio
import time

urls = [f"https://jsonplaceholder.typicode.com/posts/{i}" for i in range(1000)]
start_time = time.time()

async def fetch(client, url, limiter):
async with limiter:
await client.get(url)

async def main():
limiter = anyio.CapacityLimiter(100) # макс. 100 параллельных запросов
async with httpx.AsyncClient(timeout=30) as client:
async with anyio.create_task_group() as task_group:
for url in urls:
task_group.start_soon(fetch, client, url, limiter)

anyio.run(main)
print(f"{len(urls)} запросов выполнено за {time.time() - start_time:.2f} секунд")


💡 По факту: эти 1 000 запросов теперь обрабатываются в ~7.25 секунд, в то время, как с обычным request обработка заняла ~439.82 секунд.

Да, почти в 60 раз быстрее — без заморочек с asyncio, event loop и сложными конструкциями.


Используйте httpx.AsyncClient, устанавливайте адекватный таймаут и всегда ограничивайте параллелизм с помощью CapacityLimiter.

🐍 Ghostly Python |#полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1
🐍 PyInstaller: Упакуй Python-приложение в один исполняемый файл

Хотите сделать свои Python-скрипты портативными? PyInstaller — ваше решение. Эта библиотека преобразует скрипты в самостоятельные исполняемые файлы, автоматически включая все необходимые зависимости.

Установка:
pip install pyinstaller.


Для создания одного файла-приложения используйте команду pyinstaller --onefile myscript.py.

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

👉 Ссылка

🐍 Ghostly Python |#полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍43🤝1
Вопрос с собеса

В чём разница между shallow copy и deep copy в Python?

Пример🔽
import copy

original = [[1, 2], [3, 4]]

shallow = copy.copy(original)
deep = copy.deepcopy(original)

original[0][0] = 99

print(shallow) # ➔ [[99, 2], [3, 4]]
print(deep) # ➔ [[1, 2], [3, 4]]


Ответ🔽
copy.copy() создаёт поверхностную копию объекта. Это значит, что сам объект копируется, но вложенные объекты продолжают ссылаться на те же данные.

copy.deepcopy() создаёт глубокую копию: копирует и сам объект, и все вложенные объекты, рекурсивно. В результате оригинал и копия полностью независимы.

🟢 Когда использовать:

copy() — если объект неглубокий и вложенные данные не будут изменяться.

deepcopy() — если нужно полностью изолировать копию от оригинала, включая всё содержимое.

❗️Важно: deepcopy может быть медленным на больших и вложенных структурах. Используйте осознанно.

📌 Подходит для работы со сложными структурами данных: списками списков, словарями, графами и т.д.


🐍 Ghostly Python | #собес
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
🖼️ Библиотека: FastAPI-Users

FastAPI-Users — это библиотека для быстрой интеграции системы аутентификации и управления пользователями в приложениях на FastAPI. Она предоставляет готовые модели, маршруты и утилиты для регистрации, входа, восстановления пароля, верификации email и управления сессиями.

ℹ️ Основные возможности:

🟢 Готовая аутентификация через JWT, cookie, OAuth2 (Google, GitHub и др.)
🟢 Управление аккаунтом (изменение данных, деактивация)
🟢 Поддержка SQLAlchemy, MongoDB, Tortoise ORM
🟢 Интеграция с FastAPI без boilerplate-кода

⚙️ Пример использования:

from fastapi import FastAPI
from fastapi_users import FastAPIUsers, models
from fastapi_users.authentication import JWTAuthentication
from fastapi_users.db import SQLAlchemyBaseUserTable, SQLAlchemyUserDatabase
from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base
import sqlalchemy as sa

SECRET_KEY = "mysecretkey"
DATABASE_URL = "sqlite:///./test.db"

Base: DeclarativeMeta = declarative_base()

class UserTable(Base, SQLAlchemyBaseUserTable):
pass

class User(models.BaseUser):
pass

class UserCreate(models.BaseUserCreate):
pass

class UserUpdate(User, models.BaseUserUpdate):
pass

class UserDB(User, models.BaseUserDB):
pass

engine = sa.create_engine(DATABASE_URL)
Base.metadata.create_all(engine)

async def get_user_db():
yield SQLAlchemyUserDatabase(UserDB, engine, UserTable.__table__)

jwt_authentication = JWTAuthentication(
secret=SECRET_KEY, lifetime_seconds=3600, tokenUrl="auth/jwt/login"
)

fastapi_users = FastAPIUsers(
get_user_db,
[jwt_authentication],
User,
UserCreate,
UserUpdate,
UserDB,
)

app = FastAPI()

app.include_router(
fastapi_users.get_auth_router(jwt_authentication),
prefix="/auth/jwt",
tags=["auth"],
)
app.include_router(
fastapi_users.get_register_router(),
prefix="/auth",
tags=["auth"],
)

@app.get("/protected-route")
async def protected_route(user: User = fastapi_users.current_user()):
return {"message": f"Hello, {user.email}!"}


✔️ Установка:

pip install fastapi-users[sqlalchemy]


➡️ Ссылка на документацию

🐍 Ghostly Python | #библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26😁3🤔21
📱 Фишка: functools.singledispatch — перегрузка функций для разных типов аргументов

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

from functools import singledispatch
from decimal import Decimal

@singledispatch
def pretty_format(data):
"""Базовый обработчик, вызывается, если тип не найден."""
return f"Неизвестный тип: {type(data).__name__}"

@pretty_format.register(str)
def _(text):
return f"Строка: '{text}' (длина: {len(text)})"

@pretty_format.register(int)
def _(number):
return f"Целое число: {number:#x} (шестнадцатеричное)"

@pretty_format.register(list)
def _(items):
items_str = ", ".join(map(str, items))
return f"Список [{items_str}] из {len(items)} элементов"

@pretty_format.register(float)
@pretty_format.register(Decimal)
def _(num):
return f"Дробное число: {num:.2f}"

print(pretty_format("Привет")) # ➔ Строка: 'Привет' (длина: 6)
print(pretty_format(42)) # ➔ Целое число: 0x2a (шестнадцатеричное)
print(pretty_format([1, 2, 3])) # ➔ Список [1, 2, 3] из 3 элементов
print(pretty_format(3.14159)) # ➔ Дробное число: 3.14
print(pretty_format({"key": "val"})) # ➔ Неизвестный тип: dict (вызвана базовая функция)

# Изменили оригинал — прокси «увидит» это settings["port"] = 9000
# (Эта строка из примера с MappingProxyType здесь не относится, оставлена для аналогии с вашим шаблоном)


📌 Как это работает?

🟢 Динамическая диспетчеризация: При вызове pretty_format(arg) декоратор автоматически смотрит на тип arg и выбирает зарегистрированную для этого типа функцию.

🟢 Расширяемость: Вы можете добавлять обработчики для новых типов в любом месте программы, даже в другом модуле. Это удобно для библиотек, которые хотят позволить пользователям расширять их функциональность.

🟢 Иерархия типов: Если для точного типа нет обработчика, можно использовать register() для базовых классов (например, numbers.Integral).

🟢 Чистая архитектура: Избавляет от длинных цепочек if isinstance(...) внутри одной функции, делая код модульным и легко поддерживаемым.

🐍 Ghostly Python | #фишки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
👩‍💻 Викторина: что выведет код?

def tricky(x, y=[]):
if not y:
z = x.copy()
else:
z = x
z.append(id(y))
return z is x, z

a = [1, 2]
b = [3, 4]

r1 = tricky(a)
r2 = tricky(b, a)
r3 = tricky(b)

print(r1[0], r2[0], r3[0])
print(r1[1], r2[1], r3[1])


🐍 Ghostly Python | #викторина
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👍5👏3👎2💘2❤‍🔥1
90% айтишников проваливают рост в тимлиды ещё до старта

Они читают книжки, смотрят курсы — а потом ломаются на первом конфликте с командой или бизнесом

В канале Артём Харченков | IT Инсайты:

— Разборы реальных ситуаций из жизни тимлида
— Как выглядят правильные решения глазами тимлида
— Чем отличается сильный айтишник от тимлида

Подписывайся, если хочешь понимать, как устроено тимлидство изнутри: @teamlead_insights
1
⚙️ Управление процессами на Python с помощью subprocess

subprocess — встроенный модуль Python для запуска внешних программ, выполнения команд shell и взаимодействия с процессами. Полезен при автоматизации, DevOps-скриптах и интеграции с CLI-инструментами.

✔️ Стандартная библиотека — установка не требуется

⚙️ Пример: выполнение shell-команды

import subprocess

# Выполняем команду ls (или dir на Windows)
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)

# Печатаем результат
print(result.stdout)


💬 Как это работает:

1. subprocess.run([...]) запускает команду и ожидает завершения.
2. capture_output=True сохраняет вывод команды.
3. text=True возвращает результат в виде строки (а не байтов).

Отлично подходит для автоматизации сборки, запуска скриптов, управления системными утилитами и бэкапами


🐍 Ghostly Python | #гайды
Please open Telegram to view this post
VIEW IN TELEGRAM