🟠 Работает через Python, минимум зависимостей (python-dateutil + стандартная библиотека)🟠 Показывает маршрут письма (hop chain), включая IP, Host, время задержки🟠 CLI-интерфейс: передаёшь файл — получаешь аналитику в терминале🟠 Лёгкий, быстрый, без GUI, прямо как для тебя надо
./tracemail.py -r email_sample.eml
# — покажет список hop’ов: от кого до кого, IP, delay в секундах
#!/usr/bin/env python3
import sys
from email import message_from_file
from datetime import datetime
from dateutil import parser as dateparser
def parse_hops(email_path):
msg = message_from_file(open(email_path, encoding='utf-8'))
received = msg.get_all('Received') or []
hops = []
for header in received:
parts = header.split(';')
from_part = parts[0].strip()
date_part = parts[-1].strip()
try:
ts = dateparser.parse(date_part)
except:
ts = None
hops.append((from_part, ts))
return hops
def print_hops(hops):
for i in range(len(hops)-1):
src, t1 = hops[i]
_, t2 = hops[i+1]
delay = (t1 - t2).total_seconds() if t1 and t2 else '?'
print(f"Hop {i+1}: {src} — Delay: {delay}s")
if hops:
print(f" final hop: {hops[-1][0]}")
if __name__ == '__main__':
if len(sys.argv) < 3 or sys.argv[1] != '-r':
print("Usage: tracemail.py -r <email_file>")
sys.exit(1)
hops = parse_hops(sys.argv[2])
print_hops(hops)
pip install python-dateutil
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍5🔥4❤3
CyNER🟠 Поддерживает выделение как общих (имена, организации), так и специализированных cyber-сущностей, включая IoC.🟠 Комбинирует трансформерные модели с эвристическими правилами — точнее, чем простые NER-библиотеки.🟠 Подходит для автоматизированного анализа отчетов, логов и текстов разведки.
pip install cyner
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤6👍4🔥2
phonenumbers, folium, opencage (при наличии API-ключа), argparse, colorama🟠 Парсит номер, определяет страну, тип номера (мобила/стационар), часовой пояс и оператора — через phonenumbers🟠 При наличии ключа OpenCage — преобразует локацию в координаты и строит интерактивную карту через folium, сохраняет как HTML🟠 Выделяет важные части цветом через colorama, чтобы сразу видеть страну, оператора и локацию — сок в UX
python phone_info.py --number "+1234567890" --map --key YOUR_OPENCAGE_API_KEY
import argparse
import phonenumbers
from phonenumbers import geocoder, carrier, timezone
import folium
from opencage.geocoder import OpenCageGeocode
from colorama import init, Fore
init()
def get_info(number):
pn = phonenumbers.parse(number)
info = {
"formatted": phonenumbers.format_number(pn, phonenumbers.PhoneNumberFormat.INTERNATIONAL),
"country": geocoder.description_for_number(pn, "en"),
"carrier": carrier.name_for_number(pn, "en"),
"timezone": timezone.time_zones_for_number(pn)
}
return info
def create_map(location_name, api_key, output="map.html"):
geocoder = OpenCageGeocode(api_key)
results = geocoder.geocode(location_name)
if results:
lat, lng = results[0]['geometry']['lat'], results[0]['geometry']['lng']
m = folium.Map(location=[lat, lng], zoom_start=7)
folium.Marker([lat, lng], popup=location_name).add_to(m)
m.save(output)
return output
return None
if __name__ == "__main__":
p = argparse.ArgumentParser("Phone Info with Map")
p.add_argument("--number", required=True, help="Phone number with country code")
p.add_argument("--map", action="store_true", help="Generate map HTML")
p.add_argument("--key", help="OpenCage API key for map")
args = p.parse_args()
info = get_info(args.number)
print(f"{Fore.GREEN}Number: {info['formatted']}")
print(f"{Fore.CYAN}Country: {info['country']}")
print(f"{Fore.YELLOW}Carrier: {info['carrier']}")
print(f"{Fore.MAGENTA}Timezone: {', '.join(info['timezone'])}")
if args.map and args.key:
path = create_map(info['country'], args.key)
if path:
print(f"{Fore.BLUE} Map saved to: {path}")
else:
print(f"{Fore.RED}Failed to generate map")
pip install phonenumbers folium opencage colorama
Обязательно нужен ключ от OpenCage для геокодинга. Базовая инфа — по коду и структуре — без карты — тоже работает.
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤9👍7🔥3
reladiff🟠 Cross-Database Diff: сравнение таблиц через хеширование поэтапно, подгружая и анализируя лишь необходимые куски данных — работает быстро даже при миллионах строк.🟠 Intra-Database Diff: если таблицы находятся в одной базе, сравнение выполняется через JOIN, плюс дополнительные статистические метрики.🟠 Многопоточность, гибкие настройки, вывод в JSON и git-подобный формат (+/-) — идеально для интеграции в CI/CD pipelines.🟠 Поддержка разнообразных СУБД: PostgreSQL, Snowflake, MySQL, BigQuery, Oracle, ClickHouse и др.
pip install reladiff
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4
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👍7🔥5🥰2❤1
🟠 Обработка пропусков, категориальных и числовых признаков🟠 Кодирование категориальных переменных🟠 Нормализация и масштабирование🟠 Отбор признаков по статистике и важности🟠 Полная интеграция с scikit-learn
pip install feature-engine
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2👍2🥰1
✅ File Organizer by Extension — скрипт, который автоматически сортирует файлы в заданной папке по расширениям: .pdf, .jpg, .docx и т.п., перемещая их в соответствующие поддиректории.
📱 Python 3.7+
💾 Модули:
📌 Особенности скрипта:
👨💻 Пример использования (CLI):
👨💻 Код скрипта (file_organizer.py):
#скрипты
🖥 Python_Scripts
📱 Python 3.7+
💾 Модули:
os, shutil, argparse📌 Особенности скрипта:
Обходит все файлы в указанной папке
Сортирует по расширениям: создаёт папки типа pdf, jpg и т.д., если их нет
Перемещает файлы в соответствующую папку, очищая беспорядок в папке загрузок, документообороте и т. д.
👨💻 Пример использования (CLI):
python file_organizer.py /path/to/Downloads
👨💻 Код скрипта (file_organizer.py):
import os
import shutil
import argparse
def organize_folder(folder):
for filename in os.listdir(folder):
fullpath = os.path.join(folder, filename)
if os.path.isfile(fullpath):
ext = filename.split('.')[-1].lower()
dest_folder = os.path.join(folder, ext)
os.makedirs(dest_folder, exist_ok=True)
shutil.move(fullpath, os.path.join(dest_folder, filename))
print(f"Moved {filename} to ./{ext}/")
if __name__ == "__main__":
parser = argparse.ArgumentParser("File Organizer by Extension")
parser.add_argument("folder", help="Target folder to organize")
args = parser.parse_args()
organize_folder(args.folder)
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥4
Missingno🟠 Генерирует визуальный отчёт пропусков данных: matrix, bar, heatmap, dendrogram. Удобно видеть, где лучше начинать очистку.🟠 Интегрируется с pandas.DataFrame — работать просто и понятно.
pip install missingno
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🥰3🔥2
Constructor-Telegram-Bots-master.zip
129.3 KB
django postgresql #telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍24🔥12👏4❤2
ubelt🟠 Расширенный Path с методами expand, ensuredir, augment, delete, plus удобные функции для работы с кэшем и конфигами (appdir).🟠 Функции-хелперы: hash_data/ hash_file для быстрого хеширования, Timer, Cacher/CacheStamp для кэширования и замера скорости выполнения.🟠 CLI-инструменты: прогресс-бар ProgIter, скачивание с download, выполнение shell-команд через cmd.🟠 Дополнительные классы: UDict (расширенные словари), SetDict, urepr (человекочитаемая строка для структуры), color_text — печатает текст с ANSI-цветами.🟠 Ничего лишнего: все функции чисто-Python, почти без зависимостей, с хорошим тестовым покрытием и документацией.
pip install ubelt
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
shutil, os, argparse, datetime, (опционально) schedule🟠 Копирует содержимое папки source в архивную папку destination/YYYY-MM-DD_HHMMSS/🟠 Автоматически создаёт имя папки с таймстампом🟠 Можно запускать вручную или по расписанию (например, ежедневно)🟠 Простой, надёжный, без лишних зависимостей — идеально для резервной заботы
python backup_scheduler.py --src /home/user/docs --dst /home/user/backups --schedule 24
👨💻 Код скрипта (backup_scheduler.py):
import os
import shutil
import argparse
from datetime import datetime
import time
def backup(src, dst):
timestamp = datetime.now().strftime("%Y-%m-%d_%H%M%S")
backup_path = os.path.join(dst, timestamp)
os.makedirs(backup_path, exist_ok=True)
for root, dirs, files in os.walk(src):
rel = os.path.relpath(root, src)
dest_dir = os.path.join(backup_path, rel)
os.makedirs(dest_dir, exist_ok=True)
for file in files:
shutil.copy2(os.path.join(root, file), os.path.join(dest_dir, file))
print(f"✅ Backup created at: {backup_path}")
def main():
parser = argparse.ArgumentParser("Directory Backup Scheduler")
parser.add_argument("--src", required=True, help="Source directory to backup")
parser.add_argument("--dst", required=True, help="Destination directory for backups")
parser.add_argument("--schedule", type=int, help="Interval in hours between backups")
args = parser.parse_args()
if args.schedule:
while True:
backup(args.src, args.dst)
time.sleep(args.schedule * 3600)
else:
backup(args.src, args.dst)
if __name__ == "__main__":
main()
Только стандартные модули Python — работает сразу, без
pip.#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥4👍3
dask🟠 Масштабирование: от одного ядра до всего кластера.🟠 Совместимый синтаксис: DataFrame, Array, ML API аналогичны знакомым библиотекам.🟠 Отличается удобством и гибкостью: можно начать с локальных расчётов, а затем перенести тот же код в прод.🟠 Используется крупными компаниями: Walmart, Nvidia, NASA, Capital One и другими.
🟠 Открытый исходник, активное развитие, последний релиз был в феврале 2024.
pip install dask[complete]
(пакет с зависимостями для полного функционала — параллельные файловые системы, SQL, ML и др.)
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤6👍1🔥1
📱 Python 3.8+
💾 Модули:
smtplib, email, csv, argparse📌 Возможности скрипта:
Считывает список адресов и сообщений из CSV (столбцы: email, subject, message)
Отправляет письма через SMTP (например, Gmail)
Простая фильтрация: можно выбрать часть списка и режим dry-run для теста
Экономит время, особенно если нужно отправить много писем вручную
👨💻 Пример использования (CLI):
python bulk_emailer.py --csv recipients.csv --smtp_host smtp.gmail.com --port 587 --user you@example.com --password ****
👨💻 Код скрипта (bulk_emailer.py):
import smtplib
import csv
import argparse
from email.message import EmailMessage
def send_bulk(csv_path, smtp_host, port, user, password, dry=False):
with open(csv_path, newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
with smtplib.SMTP(smtp_host, port) as smtp:
smtp.starttls()
smtp.login(user, password)
for row in reader:
msg = EmailMessage()
msg["From"] = user
msg["To"] = row["email"]
msg["Subject"] = row["subject"]
msg.set_content(row["message"])
if dry:
print(f"DRY RUN → To: {row['email']}, Subject: {row['subject']}")
else:
smtp.send_message(msg)
print(f"Sent to {row['email']}")
if __name__ == "__main__":
p = argparse.ArgumentParser("Bulk Email Sender")
p.add_argument("--csv", required=True, help="CSV file with email,subject,message columns")
p.add_argument("--smtp_host", default="smtp.gmail.com")
p.add_argument("--port", type=int, default=587)
p.add_argument("--user", required=True, help="SMTP username")
p.add_argument("--password", required=True, help="SMTP password or app-password")
p.add_argument("--dry", action="store_true", help="Dry run (dont actually send)")
args = p.parse_args()
send_bulk(args.csv, args.smtp_host, args.port, args.user, args.password, args.dry)
📌 Где пригодится:
Рассылка обновлений, приглашений, опросов, уведомлений большую аудиторию
Режим dry-run позволяет проверить письма перед реальной отправкой
Экономия десятков минут на рутинной отправке писем — особенно для OSINT или бизнеса
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥2
Featuretools🟠 Automated Feature Engineering — строит фичи типа средних, максимумов, counts и даже временных окон для больших наборов данных без ручного кода.🟠 Особенно эффективна для темпоральных и реляционных сцен: может создавать признаки «на основе истории» (например, средняя стоимость заказов за последние 7 дней).🟠 Значительно ускоряет создание признаков и снижает руки коду — полезно для быстрого прототипирования и экспериментов.
pip install featuretools
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥1
secrets, string, argparse🟠 Генерирует пароль, используя буквы (все регистры), цифры и спецсимволы🟠 Криптографически стойкий — идеально подходит для безопасных паролей🟠 Простая CLI: указываешь длину — получаешь новый пароль на выходе
python gen_pass.py --length 20
import secrets
import string
import argparse
def generate_password(length):
alphabet = string.ascii_letters + string.digits + string.punctuation
# можно исключить потенциально проблемные символы вроде '\' или '"' по желанию
return ''.join(secrets.choice(alphabet) for _ in range(length))
if __name__ == '__main__':
parser = argparse.ArgumentParser("Secure Password Generator")
parser.add_argument("--length", type=int, default=12, help="Password length")
args = parser.parse_args()
pwd = generate_password(args.length)
print(pwd)
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥4👍2
autofeat🟠 Автоматическая генерация фичей — создаёт множество потенциально полезных комбинаций и трансформаций признаков, освобождая от ручного труда.🟠 Отбор значимых признаков — применяет L1-регуляризацию, чтобы оставить только те, что действительно влияют на модель.🟠 Понятность и прозрачность — результат пригоден для линейных моделей, которые легко интерпретировать и объяснить.
pip install autofeat
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2
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
❤6👍6🔥3
msgspec🟠 Очень быстрая сериализация/десериализация JSON или MessagePack🟠 Встроенный механизм msgspec.Struct — легкая альтернатива Pydantic для валидации🟠 Отличается компактным двоичным представлением (MessagePack)🟠 Подходит для межпроцессного обмена, сетевого взаимодействия, микросервисов с минимальными накладными расходами
⚙️ Установка:
pip install msgspec
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1🥰1
🟠 Каждую минуту проверяет содержимое указанного сайта.🟠 Если сайт изменился — выводит сообщение "Сайт обновился!".
Код:
import requests
import hashlib
import time
URL = 'https://example.com' # замени на нужный сайт
CHECK_INTERVAL = 60 # интервал проверки в секундах
def get_hash(url):
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
return hashlib.md5(response.text.encode('utf-8')).hexdigest()
except Exception as e:
print("Ошибка при запросе:", e)
return None
def monitor_site(url):
print(f"Следим за сайтом: {url}")
old_hash = get_hash(url)
if old_hash is None:
print("Не удалось получить начальное состояние.")
return
while True:
time.sleep(CHECK_INTERVAL)
new_hash = get_hash(url)
if new_hash is None:
continue
if new_hash != old_hash:
print(f"[{time.ctime()}] Сайт обновился!")
old_hash = new_hash
else:
print(f"[{time.ctime()}] Без изменений.")
monitor_site(URL)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤5🔥5
package-smoke-test🟠 Простая командная утилита: python3 -m package_smoke_test --module your_module — выдаёт статус установки, путь и версию.🟠 Подходит для smokescreen-тестов: быстро проверить наличие необходимых пакетов перед запуском скриптов или сервисов.🟠 Минимум зависимостей и максимум пользы — удобно допилить в CI пайплайн без лишних телодвижений.
pip install package-smoke-test
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1🤩1
os, time (стандартные), cv2 sqlite3🟠 Берёт видео с камеры (или файла).🟠 Сравнивает текущий кадр с предыдущим.🟠 Если есть движение (>1% пикселей изменилось) → сохраняет кадр в папку motion_frames.🟠 Выводит сообщение о сохранении.🟠 Работает в цикле, пока не остановишь (Ctrl+C).
import cv2
import time
import os
VIDEO_SOURCE = 0 # 0 = вебкамера, или URL/IP камеры, или путь к видеофайлу
SAVE_DIR = "motion_frames"
os.makedirs(SAVE_DIR, exist_ok=True)
cap = cv2.VideoCapture(VIDEO_SOURCE)
_, prev_frame = cap.read()
prev_frame = cv2.cvtColor(prev_frame, cv2.COLOR_BGR2GRAY)
prev_frame = cv2.GaussianBlur(prev_frame, (21, 21), 0)
frame_id = 0
print("📹 Запущен анализ. Ctrl+C для остановки.")
try:
while True:
ret, frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (21, 21), 0)
diff = cv2.absdiff(prev_frame, gray)
thresh = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)[1]
motion_percent = (cv2.countNonZero(thresh) / thresh.size) * 100
if motion_percent > 1.0:
filename = f"{SAVE_DIR}/motion_{frame_id}.jpg"
cv2.imwrite(filename, frame)
print(f"📸 Движение! Сохранил кадр: {filename}")
prev_frame = gray
frame_id += 1
time.sleep(0.2)
except KeyboardInterrupt:
print("🛑 Остановлено пользователем.")
finally:
cap.release()
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤7👍5🔥4