os, shutilimport os
import shutil
def organize_folder(path):
extensions = {
"Images": [".jpg", ".jpeg", ".png", ".gif"],
"Documents": [".pdf", ".docx", ".txt"],
"Music": [".mp3", ".wav", ".flac"],
"Videos": [".mp4", ".avi", ".mkv"],
}
for filename in os.listdir(path):
filepath = os.path.join(path, filename)
if os.path.isfile(filepath):
for folder, exts in extensions.items():
if any(filename.lower().endswith(ext) for ext in exts):
target_folder = os.path.join(path, folder)
os.makedirs(target_folder, exist_ok=True)
shutil.move(filepath, os.path.join(target_folder, filename))
print(f"Переместил {filename} -> {folder}")
break
if __name__ == "__main__":
organize_folder("C:/Users/user/Downloads")
🟠 Сканирует папку🟠 Определяет расширение файла🟠 Перемещает файл в подпапку по типу (создаёт папку, если нужно)
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍2🔥2😁1
rpyc🟠 Симметричность: клиент и сервер могут выступать обе роли, вызывать функции и обмениваться объектами.🟠 Прозрачность: удалённые функции, классы и объекты выглядят как локальные.🟠 Поддержка синхронных и асинхронных вызовов (AsyncResult как промисы).🟠 Исключения передаются по сети как в локальном коде — удобно для отладки.🟠 Удобна для распределённых Python-приложений, отладочных оболочек, удалённого управления, микросервисов, интерактивных shell-сессий.
pip install rpyc
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🥰2
watchdog, argparse, time (стандартная библиотека)- Мониторит создание, изменение, удаление и перемещение файлов
- Позволяет указать директорию и включить вложенные папки (--recursive)
- Поддерживает фильтрацию по расширению файлов (например, только .py)
- Основан на библиотеке watchdog, которая использует platform-specific механизмы (inotify, Windows API)
python dir_watcher.py --path ./my_folder --recursive --ext .txt,.log
import time, argparse
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class Handler(FileSystemEventHandler):
def __init__(self, exts):
self.exts = tuple(exts)
def dispatch(self, event):
if event.is_directory: return
if self.exts and not event.src_path.endswith(self.exts): return
super().dispatch(event)
def on_created(self, event):
print(f"🟢 Created: {event.src_path}")
def on_modified(self, event):
print(f"🟡 Modified: {event.src_path}")
def on_deleted(self, event):
print(f"🔴 Deleted: {event.src_path}")
def on_moved(self, event):
print(f"🔁 Moved: {event.src_path} → {event.dest_path}")
def main():
parser = argparse.ArgumentParser(description="Directory Watcher")
parser.add_argument("--path", required=True, help="Папка для мониторинга")
parser.add_argument("--recursive", action="store_true", help="Сканировать вложенные папки")
parser.add_argument("--ext", default="", help="Фильтр по расширениям (через запятую)")
args = parser.parse_args()
exts = [e.strip() for e in args.ext.split(",") if e.strip()]
handler = Handler(exts)
observer = Observer()
observer.schedule(handler, args.path, recursive=args.recursive)
observer.start()
print(f"🚀 Monitoring '{args.path}' (recursive={args.recursive}, exts={exts})")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
main()
pip install watchdog
- Автоматический запуск сборки/тестов при изменении файлов
- Синхронизация или обработка новых логов/данных
- Автоматизация задач DevOps, CI/CD, генерации статических сайтов и т.п.
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥2
🔥 Полезные библиотеки Python
✅
📌 Pretty Pie Log — лёгкая и функциональная библиотека для логирования в Python, с цветными и структурированными логами, поддержкой JSON и безопасной работой в многопоточном коде. Отличный способ сделать логи визуально понятнее и более информативными.
📌 Особенности библиотеки:
⚙️ Установка:
🔢 Документация
#библиотеки
🖥 Python_Scripts
✅
Pretty Pie Log📌 Pretty Pie Log — лёгкая и функциональная библиотека для логирования в Python, с цветными и структурированными логами, поддержкой JSON и безопасной работой в многопоточном коде. Отличный способ сделать логи визуально понятнее и более информативными.
📌 Особенности библиотеки:
🟠 Цветная и структурированная выдача — логи цветные, легко читаются; также поддерживается формат JSON для дальнейшей обработки.
🟠 Потокобезопасность — корректно работает в многопоточных приложениях без потерь или искажений.
🟠 Удобные декораторы — позволяет автоматически логгировать вход и выход функций (включая стек-трейсы), без лишнего кода.
⚙️ Установка:
pip install pretty-pie-log
🔢 Документация
#библиотеки
🖥 Python_Scripts
❤3👍2
requests, time, argparse, datetime, osДелает запросы на указанные URL через заданный интервал
Логирует скорость ответа и HTTP-статусы
При неоднократных ошибках отправляет уведомление (например, в Telegram)
Подходит для круглосуточного мониторинга API, сайтов и веб-сервисов
python uptime_monitor.py --urls https://example.com,https://api.example.com \
--interval 60 --retries 3 --notify-telegram
import requests, time, argparse, datetime, os
def alert_telegram(bot_token, chat_id, msg):
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
requests.post(url, data={"chat_id": chat_id, "text": msg})
def monitor(urls, interval, retries, bot_token=None, chat_id=None):
status = {u: True for u in urls}
while True:
for u in urls:
try:
r = requests.get(u, timeout=10)
ok = r.status_code == 200
resp = f"{r.status_code}, {r.elapsed.total_seconds():.2f}s"
except Exception as e:
ok = False
resp = f"Error: {e}"
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{now}] {u} → {resp}")
if not ok and status[u]:
status[u] = False
msg = f"⚠️ {u} is DOWN at {now}"
if bot_token and chat_id:
alert_telegram(bot_token, chat_id, msg)
if ok and not status[u]:
status[u] = True
msg = f"✅ {u} is UP again at {now}"
if bot_token and chat_id:
alert_telegram(bot_token, chat_id, msg)
time.sleep(interval)
if __name__ == "__main__":
p = argparse.ArgumentParser()
p.add_argument("--urls", required=True, help="Comma-separated URLs")
p.add_argument("--interval", type=int, default=60)
p.add_argument("--retries", type=int, default=3)
p.add_argument("--bot-token", default=os.getenv("TELEGRAM_TOKEN"))
p.add_argument("--chat-id", default=os.getenv("TELEGRAM_CHAT_ID"))
args = p.parse_args()
urls = [u.strip() for u in args.urls.split(',')]
monitor(urls, args.interval, args.retries, args.bot_token, args.chat_id)
pip install requests
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥3
PyGOD🟠 Все виды аномалий — поддерживает разнообразные методы, как графовые, так и основанные на ML и глубоких подходах.🟠 Модульная архитектура — детекторы разбиты на компоненты, которые легко настраивать и комбинировать по потребностям.🟠 Масштабируемость — поддерживает обучение на батчах и выборки для работы с большими графами.🟠 Надёжность и открытую разработку — библиотека под BSD 2-Clause, with CI, unit-тесты и покрытие.
pip install pygod
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥3
psutil, subprocess, argparse, time🟠 Проверяет состояние заданной службы (через psutil.win_service_get)🟠 Если служба не работает — делает попытку перезапуска через sc start🟠 Логирует результат: статус до/после🟠 Можно указать таймаут между проверками и автоматический перезапуск — минималистично и эффективно (stackoverflow.com, gist.github.com)
python service_watchdog.py --service "Spooler" --interval 30
import psutil, subprocess, time, argparse
def check_service(name):
try:
svc = psutil.win_service_get(name).as_dict()
return svc.get('status') == 'running'
except Exception as e:
print(f"Ошибка при проверке службы {name}: {e}")
return False
def restart_service(name):
print(f"Попытка перезапуска службы: {name}")
subprocess.run(['sc', 'start', name], shell=True)
def main(service, interval):
while True:
running = check_service(service)
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] {service} is {'running' if running else 'NOT running'}")
if not running:
restart_service(service)
time.sleep(5)
print(f"Снова проверяю...")
time.sleep(interval)
else:
time.sleep(interval)
if __name__ == "__main__":
parser = argparse.ArgumentParser("Windows Service Watchdog")
parser.add_argument("--service", required=True, help="Name of the Windows service")
parser.add_argument("--interval", type=int, default=60, help="Check interval in seconds")
args = parser.parse_args()
main(args.service, args.interval)
pip install psutil
— psutil нужен для проверки статуса службы. Команда sc используется для запуска, есть в Windows по умолчанию.
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤5🔥3
pyperclip для работы с буфером обмена. Подробнее в репозитории. GitHub
GitHub
mclip.py):import sys
import pyperclip
snippets = {
"agree": "I agree to the terms and conditions.",
"busy": "I'm currently busy. I'll get back to you soon.",
"upsell": "Have you considered upgrading to our premium plan?"
}
if len(sys.argv) != 2 or sys.argv[1] not in snippets:
print("Usage: python mclip.py <keyphrase>")
print("Available keyphrases:", ", ".join(snippets.keys()))
sys.exit(1)
pyperclip.copy(snippets[sys.argv[1]])
print(f"Copied snippet for '{sys.argv[1]}' to clipboard.")
🟠 Вы задаёте ключевое слово, скрипт копирует соответствующий текст в буфер — быстро и без лишних движений.🟠 Отлично подходит для шаблонных ответов, быстрых вставок или автоматизации рутины.
Ссылка на репозиторий: GitHub.
#скрипты
🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
LivePython🟠 Анимация выполнения — пошагово показывает, какая строка выполняется, и как меняются данные.🟠 Отлично подходит для обучения и объяснений — визуализация кода помогает быстрее понять логику, особенно новичкам.🟠 Лёгкая и простая в использовании — минимализм и эффективность, без сложной настройки.
pip install livepython
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤8👍4
ast — никакие внешние зависимости не требуются. (GitHub репозиторий)index.py):import sys
import ast
def analyze_python_file(path):
with open(path, 'r') as f:
source = f.read()
tree = ast.parse(source)
analyzer = {
"lines": source.count('\n'),
"functions": [node.name for node in ast.walk(tree) if isinstance(node, ast.FunctionDef)],
"classes": [node.name for node in ast.walk(tree) if isinstance(node, ast.ClassDef)],
"imports": [node.names[0].name for node in ast.walk(tree) if isinstance(node, ast.Import)],
}
return analyzer
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python index.py <path_to_python_file>")
sys.exit(1)
path = sys.argv[1]
result = analyze_python_file(path)
print(f"Analysis of {path}:")
print(f"Lines: {result['lines']}")
print(f"Functions: {result['functions']}")
print(f"Classes: {result['classes']}")
print(f"Imports: {result['imports']}")
(Оригинальный код использует
ast и выводит в лог файл структуру файла с подробными данными.)Ссылка на репозиторий: GitHub
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3🔥2
River🟠 Поддержка incremental learning — модели обновляются по одной записи или мини-батчу, без необходимости переучиваться на всём наборе.🟠 Примитивы для обработки данных “на лету”: трансформеры, нормализаторы, one-hot-кодировщики, скейлеры, и др., которые совместимы с потоковым обучением.🟠 Поддержка метрик в режиме онлайн: accuracy, precision, recall, AUC, plus drift detection tools.🟠 Архитектура ориентирована на эффективное использование памяти и скорость — идеальна для систем с ограниченными ресурсами.🟠 Активное развитие и сообщество, open-source, большой набор алгоритмов для классификации, регрессии, кластеризации и обработки данных в потоке.
pip install river
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
os, shutil, datetime, zipfile.import os
import shutil
import zipfile
from datetime import datetime, timedelta
def archive_old_logs(src_dir, archive_dir, days=30):
cutoff = datetime.now() - timedelta(days=days)
os.makedirs(archive_dir, exist_ok=True)
to_archive = []
for root, dirs, files in os.walk(src_dir):
for f in files:
if f.endswith(".log"):
full = os.path.join(root, f)
mtime = datetime.fromtimestamp(os.path.getmtime(full))
if mtime < cutoff:
to_archive.append(full)
if not to_archive:
print("No old logs to archive.")
return
zip_name = os.path.join(archive_dir, f"logs_archive_{datetime.now():%Y%m%d}.zip")
with zipfile.ZipFile(zip_name, "w", compression=zipfile.ZIP_DEFLATED) as zf:
for f in to_archive:
arcname = os.path.relpath(f, src_dir)
zf.write(f, arcname)
os.remove(f)
print(f"Archived {len(to_archive)} log files into {zip_name}")
if __name__ == "__main__":
src = "/var/log/myapp"
arch = "/var/log/myapp/archive"
archive_old_logs(src, arch, days=14)
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3👍1
Missingno🟠 Генерирует визуальный отчёт пропусков данных: matrix, bar, heatmap, dendrogram. Удобно видеть, где лучше начинать очистку.🟠 Интегрируется с pandas.DataFrame — работать просто и понятно.
pip install missingno
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
DisCoPy🟠 Чёткий декларативный синтаксис для построения диаграмм: композиции, разветвления, транспозиций, функций как морфизмов.🟠 Высокая модульность: можно комбинировать простые элементы в сложные графические структуры, отображать и вычислять дизъюнкты, копии и др.🟠 Применима как в академических задачах (теория категорий, формальная семантика), так и в продакшн-сценариях: моделирование взаимодействий, автоматические преобразования данных, DSL-эндпоинты.
pip install discopy
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥3👍2
autokey Python API — скрипты пишутся на самом AutoKey. Требуется установка приложения AutoKey (Linux).snippet_launcher.py):# snippet_launcher.py — AutoKey script
from autokey import clipboard, keyboard, system
# Словарь сниппетов
snippets = {
"addr": "ул. Гагарина, д.12, кв.34, Ташкент",
"sig": "С уважением,\nИван Иванов, инженер",
"date": system.exec_command("date +'%Y-%m-%d'")[0].strip()
}
def on_trigger(trigger_phrase):
if trigger_phrase in snippets:
text = snippets[trigger_phrase]
clipboard.fill_clipboard(text)
keyboard.send_keys("<ctrl>v")
else:
keyboard.send_keys(trigger_phrase)
# Привязка: триггер "addr" вызывает вставку адреса
on_trigger("addr")
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥1
🟠 Обработка пропусков, категориальных и числовых признаков🟠 Кодирование категориальных переменных🟠 Нормализация и масштабирование🟠 Отбор признаков по статистике и важности🟠 Полная интеграция с scikit-learn
pip install feature-engine
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
subprocess, argparse, datetime🟠 Выполняет добавление всех изменений (git add .)🟠 Составляет коммит-сообщение с временной меткой (например: Auto commit 2025-08-19 · Обновления)🟠 Делает git commit и git push, используя default-ветку🟠 Позволяет один раз запускать скрипт и забыть про многострочные команды—автоматизация на максималках
python git_auto.py
import subprocess
import argparse
from datetime import datetime
def auto_git():
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
msg = f"Auto commit {timestamp}"
try:
subprocess.run(["git", "add", "."], check=True)
subprocess.run(["git", "commit", "-m", msg], check=True)
subprocess.run(["git", "push"], check=True)
print(f"✅ Changes pushed with message: '{msg}'")
except subprocess.CalledProcessError as e:
print(f"❌ Git operation failed: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser("Automate Git Operations")
args = parser.parse_args()
auto_git()
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🔥2
wasabi🟠 Красивые цветные сообщения: msg.info(), msg.warn(), msg.fail().🟠 Поддержка таблиц и прогресс-баров.🟠 Минимум зависимостей, работает быстро.🟠 Хорошо интегрируется в пайплайны обучения моделей и тестирования.
pip install wasabi
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍6🔥4❤2
🟠 Работает прямо из консоли, без зависимостей.🟠 Можно указать целевую ветку (main, master, develop).🟠 Поддерживает dry-run — можно посмотреть, какие ветки будут удалены, перед фактическим удалением.🟠 Ускоряет навигацию и исключает мусор в локальных репозиториях.
python git-delete-merged-branches.py --base main --dry-run
Чтобы удалить реально:
python git-delete-merged-branches.py --base main
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3
halo🟠 Поддержка десятков встроенных спиннеров (точки, линии, стрелки и др.).🟠 Возможность кастомизации текста, цвета и анимации.🟠 Работает как с синхронным, так и с асинхронным кодом.🟠 Лёгкая интеграция в любые консольные проекты.
pip install halo
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤4👍3🔥2
pyotp, argparse, плюс взаимодействие с внешним VPN-CLI (например, Pritunl, Global Protect) через subprocess. (GitHub репозиторий)git clone https://github.com/Dhi13man/auto_vpn_connect.git
cd auto_vpn_connect
pip install pyotp
Файл
vpn_data.json должен содержать конфигурацию VPN-профилей:{
"config": {
"PRITUNL": {
"vpn_type": "PRITUNL",
"cli_path": "/path/to/pritunl-client"
},
"GLOBAL_PROTECT": {
"vpn_type": "GLOBAL_PROTECT",
"service_load_command": "...",
"service_unload_command": "..."
}
},
"vpn_list": [
{
"vpn_id": "<vpn_id_1>",
"vpn_type": "PRITUNL",
"pin": "<vpn_pin>",
"totp_url": "<totp_url_if_any>",
"token": "<vpn_token_if_any>"
},
{
"vpn_id": "GlobalProtect",
"vpn_type": "GLOBAL_PROTECT"
}
]
}Запуск:
python auto_vpn_connect/__main__.py
Опции позволяют:
🟠 Выбирать VPN-профиль по vpn_id🟠 Автоматически обрабатывать PIN, TOTP и токены🟠 Перезапускать VPN при падении соединения
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤6👍5🔥1😁1