15 полезных Python-скриптов для автоматизации и работы с данными
Для кого эта статья:
- начинающие и опытные программисты, ищущие решения для автоматизации рутинных задач на Python
- разработчики, желающие улучшить свои навыки и повысить эффективность работы с данными и веб-технологиями
специалисты в области анализа данных и DevOps, нуждающиеся в готовых скриптах для упрощения процессов и оптимизации рабочего времени
Python по праву считается универсальным языком-швейцарским ножом в арсенале любого разработчика. Простота синтаксиса сочетается с мощными возможностями, что делает создание эффективных скриптов доступным даже новичкам. Однако зачем изобретать велосипед, когда можно воспользоваться готовыми решениями? В этой статье я собрал 15 проверенных Python-скриптов, которые сэкономят вам часы работы и решат большинство типичных задач — от автоматизации рутины до сложной аналитики данных. 🐍💻
Хотите не просто копировать готовые скрипты, а научиться создавать собственные решения на Python? Обучение Python-разработке от Skypro — это практический курс, где вы освоите не только базовые концепции, но и продвинутые техники программирования. За 9 месяцев вы пройдете путь от новичка до разработчика, способного автоматизировать любые задачи и создавать веб-приложения. Гарантированное трудоустройство или возврат средств! 🚀
Python-скрипты для автоматизации рутинных задач (5 решений)
Автоматизация рутинных задач — первое, что приходит на ум, когда речь заходит о применении Python в повседневной работе. Представляю вам пять готовых скриптов, которые избавят вас от монотонной работы и высвободят время для более важных задач.
1. Мониторинг системных ресурсов
import psutil
import time
from datetime import datetime
def monitor_resources(interval=5, duration=60):
"""Мониторинг CPU, памяти и диска с заданным интервалом"""
end_time = time.time() + duration
while time.time() < end_time:
# Получаем текущее время
timestamp = datetime.now().strftime("%H:%M:%S")
# Получаем данные о загрузке
cpu_usage = psutil.cpu_percent()
memory_usage = psutil.virtual_memory().percent
disk_usage = psutil.disk_usage('/').percent
# Выводим данные
print(f"[{timestamp}] CPU: {cpu_usage}% | RAM: {memory_usage}% | Disk: {disk_usage}%")
time.sleep(interval)
# Пример использования: мониторинг каждые 2 секунды в течение 30 секунд
monitor_resources(interval=2, duration=30)
Этот скрипт отслеживает загрузку CPU, использование памяти и места на диске. Особенно полезен для выявления "узких мест" в производительности системы или отслеживания ресурсоемких процессов.
2. Автоматическая сортировка файлов по папкам
import os
import shutil
from pathlib import Path
def organize_files(directory):
"""Сортирует файлы по типам в соответствующие папки"""
# Словарь расширений и соответствующих папок
extensions = {
# Изображения
'.jpg': 'Images', '.jpeg': 'Images', '.png': 'Images',
'.gif': 'Images', '.bmp': 'Images',
# Документы
'.pdf': 'Documents', '.doc': 'Documents', '.docx': 'Documents',
'.txt': 'Documents', '.xls': 'Documents', '.xlsx': 'Documents',
# Видео
'.mp4': 'Videos', '.avi': 'Videos', '.mkv': 'Videos',
'.mov': 'Videos',
# Аудио
'.mp3': 'Audio', '.wav': 'Audio', '.flac': 'Audio',
# Архивы
'.zip': 'Archives', '.rar': 'Archives', '.7z': 'Archives'
}
# Создаем папки, если они не существуют
for folder in set(extensions.values()):
os.makedirs(os.path.join(directory, folder), exist_ok=True)
# Сортируем файлы
for item in os.listdir(directory):
item_path = os.path.join(directory, item)
# Пропускаем директории
if os.path.isdir(item_path):
continue
# Получаем расширение
file_ext = os.path.splitext(item)[1].lower()
# Перемещаем файл, если его расширение в списке
if file_ext in extensions:
target_folder = os.path.join(directory, extensions[file_ext])
shutil.move(item_path, os.path.join(target_folder, item))
print(f"Moved {item} to {extensions[file_ext]}")
# Пример использования
organize_files("/path/to/downloads")
Скрипт особенно полезен для автоматического наведения порядка в папке "Загрузки", где со временем накапливается множество разнотипных файлов. 📁
Алексей Сорокин, DevOps-инженер
Однажды в нашем проекте возникла проблема: каждое утро приходилось вручную проверять логи с десятка серверов, выявлять ошибки и отправлять отчёты. Это занимало около двух часов ежедневно. Я решил автоматизировать процесс с помощью Python.
Написал скрипт, который подключается к серверам по SSH, извлекает логи за последние 24 часа, анализирует их на предмет критических ошибок и отправляет краткую сводку в Slack. Скрипт запускается по расписанию через cron.
Результат превзошел ожидания — высвободились два часа ежедневно на более важные задачи, а реакция на критические ошибки стала моментальной, так как скрипт отправляет уведомления сразу при их обнаружении. За год использования этого решения мы сэкономили более 500 человеко-часов, а время отклика на инциденты сократилось с часов до минут.
3. Автоматическая отправка email-отчетов
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import pandas as pd
import datetime
def send_daily_report(recipient, data_file, sender='reports@example.com', password='your_password'):
"""Отправляет ежедневный отчет на основе данных из CSV-файла"""
# Загружаем данные
df = pd.read_csv(data_file)
# Генерируем отчет
today = datetime.date.today().strftime("%Y-%m-%d")
# Базовая статистика
total_sales = df['amount'].sum()
avg_sale = df['amount'].mean()
max_sale = df['amount'].max()
# Создаем HTML-содержимое
html = f"""
<html>
<body>
<h2>Ежедневный отчет по продажам: {today}</h2>
<p>Общая сумма: ${total_sales:.2f}</p>
<p>Средняя продажа: ${avg_sale:.2f}</p>
<p>Максимальная продажа: ${max_sale:.2f}</p>
<p>Топ-5 продаж:</p>
<table border="1">
<tr>
<th>Клиент</th>
<th>Товар</th>
<th>Сумма</th>
</tr>
"""
# Добавляем топ-5 продаж
for _, row in df.sort_values('amount', ascending=False).head(5).iterrows():
html += f"""
<tr>
<td>{row['customer']}</td>
<td>{row['product']}</td>
<td>${row['amount']:.2f}</td>
</tr>
"""
html += """
</table>
<p>Это автоматический отчет. Пожалуйста, не отвечайте на это письмо.</p>
</body>
</html>
"""
# Создаем сообщение
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = recipient
msg['Subject'] = f"Ежедневный отчет по продажам – {today}"
msg.attach(MIMEText(html, 'html'))
# Отправляем email
try:
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login(sender, password)
server.send_message(msg)
server.quit()
print(f"Отчет успешно отправлен на {recipient}")
except Exception as e:
print(f"Ошибка при отправке отчета: {e}")
# Пример использования
send_daily_report('manager@example.com', 'sales_data.csv')
Этот скрипт формирует и отправляет ежедневные отчеты о продажах, что исключает необходимость ручной обработки данных и форматирования отчетов. 📊
4. Автоматическое резервное копирование файлов
import os
import datetime
import shutil
import zipfile
def create_backup(source_dir, backup_dir=None):
"""Создает ZIP-архив с резервной копией директории"""
# Если директория для бэкапов не указана, создаем рядом с исходной
if backup_dir is None:
backup_dir = os.path.join(os.path.dirname(source_dir), 'backups')
# Создаем директорию для бэкапов, если она не существует
os.makedirs(backup_dir, exist_ok=True)
# Формируем имя файла с текущей датой и временем
timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
source_name = os.path.basename(source_dir)
backup_filename = f"{source_name}_{timestamp}.zip"
backup_path = os.path.join(backup_dir, backup_filename)
# Создаем ZIP-архив
with zipfile.ZipFile(backup_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(source_dir):
for file in files:
file_path = os.path.join(root, file)
arcname = os.path.relpath(file_path, source_dir)
zipf.write(file_path, arcname)
print(f"Backup created: {backup_path}")
return backup_path
# Функция для очистки старых бэкапов
def cleanup_old_backups(backup_dir, max_backups=5):
"""Удаляет старые бэкапы, оставляя только указанное количество последних"""
backups = []
# Собираем все файлы бэкапов
for file in os.listdir(backup_dir):
if file.endswith('.zip'):
file_path = os.path.join(backup_dir, file)
file_time = os.path.getctime(file_path)
backups.append((file_path, file_time))
# Сортируем по времени создания (новые впереди)
backups.sort(key=lambda x: x[1], reverse=True)
# Удаляем старые бэкапы
for file_path, _ in backups[max_backups:]:
os.remove(file_path)
print(f"Removed old backup: {file_path}")
# Пример использования
backup_path = create_backup("/path/to/important_files")
cleanup_old_backups(os.path.dirname(backup_path))
Скрипт создает ZIP-архив с важными файлами и автоматически удаляет старые резервные копии, оставляя только несколько последних версий. Идеальное решение для защиты важных данных. 🔒
5. Автоматический перевод текстовых файлов
import os
import googletrans
from googletrans import Translator
def translate_file(input_file, output_file=None, target_lang='en'):
"""Переводит текстовый файл на указанный язык"""
# Если выходной файл не указан, создаем имя автоматически
if output_file is None:
base, ext = os.path.splitext(input_file)
output_file = f"{base}_{target_lang}{ext}"
translator = Translator()
try:
# Читаем исходный файл
with open(input_file, 'r', encoding='utf-8') as f:
content = f.read()
# Переводим текст
translation = translator.translate(content, dest=target_lang)
# Записываем перевод в новый файл
with open(output_file, 'w', encoding='utf-8') as f:
f.write(translation.text)
print(f"Файл переведен: {output_file}")
return output_file
except Exception as e:
print(f"Ошибка при переводе файла: {e}")
return None
# Функция для перевода всех текстовых файлов в директории
def translate_directory(directory, target_lang='en', extensions=('.txt', '.md')):
"""Переводит все текстовые файлы в директории"""
translated_files = []
for file in os.listdir(directory):
file_path = os.path.join(directory, file)
# Проверяем, что это файл и имеет нужное расширение
if os.path.isfile(file_path) and file.lower().endswith(extensions):
output_file = translate_file(file_path, target_lang=target_lang)
if output_file:
translated_files.append(output_file)
return translated_files
# Пример использования
translate_directory("/path/to/documents", target_lang='es')
Этот скрипт особенно полезен для работы с многоязычными документами или подготовки материалов для международной аудитории. Поддерживает множество языков и сохраняет форматирование оригинала. 🌍
| Задача | Скрипт | Время экономии | Сложность настройки |
|---|---|---|---|
| Мониторинг системы | monitor_resources() | 1-2 часа/неделю | Низкая |
| Сортировка файлов | organize_files() | 30 мин/день | Низкая |
| Email-отчеты | senddailyreport() | 1 час/день | Средняя |
| Резервное копирование | create_backup() | 45 мин/день | Низкая |
| Перевод файлов | translate_file() | 2-3 часа/проект | Низкая |

Обработка данных и аналитика с помощью Python (4 скрипта)
Python — незаменимый инструмент для работы с данными благодаря библиотекам pandas, numpy и matplotlib. Предлагаю четыре эффективных скрипта, которые помогут в анализе и визуализации информации.
1. Анализ CSV-файлов и генерация отчетов
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
def analyze_csv(file_path, output_dir=None):
"""Анализирует CSV-файл и генерирует отчет с графиками"""
# Определяем директорию для отчета
if output_dir is None:
output_dir = os.path.join(os.path.dirname(file_path), 'reports')
os.makedirs(output_dir, exist_ok=True)
# Загружаем данные
df = pd.read_csv(file_path)
# Формируем имя отчета
base_name = os.path.splitext(os.path.basename(file_path))[0]
report_path = os.path.join(output_dir, f"{base_name}_report.html")
# Базовый анализ
summary = df.describe().T
missing_data = df.isnull().sum()
# Генерируем графики
plt.figure(figsize=(10, 6))
# Гистограммы для числовых столбцов
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
for i, col in enumerate(numeric_cols[:4]): # Ограничиваем до 4 графиков
plt.subplot(2, 2, i+1)
sns.histplot(df[col], kde=True)
plt.title(f'Distribution of {col}')
plt.tight_layout()
hist_path = os.path.join(output_dir, f"{base_name}_histograms.png")
plt.savefig(hist_path)
# Корреляционная матрица
plt.figure(figsize=(10, 8))
corr_matrix = df.select_dtypes(include=['int64', 'float64']).corr()
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
corr_path = os.path.join(output_dir, f"{base_name}_correlation.png")
plt.savefig(corr_path)
# Создаем HTML-отчет
html_content = f"""
<html>
<head>
<title>Data Analysis Report: {base_name}</title>
<style>
body {{ font-family: Arial, sans-serif; margin: 20px; }}
h1, h2 {{ color: #2c3e50; }}
table {{ border-collapse: collapse; width: 100%; }}
th, td {{ text-align: left; padding: 8px; border: 1px solid #ddd; }}
th {{ background-color: #f2f2f2; }}
tr:nth-child(even) {{ background-color: #f9f9f9; }}
.section {{ margin-bottom: 30px; }}
img {{ max-width: 100%; height: auto; }}
</style>
</head>
<body>
<h1>Data Analysis Report: {base_name}</h1>
<div class="section">
<h2>Dataset Overview</h2>
<p>Rows: {df.shape[0]}</p>
<p>Columns: {df.shape[1]}</p>
<p>Column types:</p>
<pre>{df.dtypes.to_string()}</pre>
</div>
<div class="section">
<h2>Statistical Summary</h2>
{summary.to_html()}
</div>
<div class="section">
<h2>Missing Values</h2>
{missing_data.to_frame().to_html()}
</div>
<div class="section">
<h2>Distributions</h2>
<img src="{os.path.basename(hist_path)}" alt="Histograms">
</div>
<div class="section">
<h2>Correlation Matrix</h2>
<img src="{os.path.basename(corr_path)}" alt="Correlation Matrix">
</div>
</body>
</html>
"""
# Сохраняем отчет
with open(report_path, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f"Отчет создан: {report_path}")
return report_path
# Пример использования
analyze_csv("/path/to/data.csv")
Этот скрипт преобразует сырые данные в понятный HTML-отчет с графиками, статистикой и корреляционными матрицами. Идеально для быстрого ознакомления с новым набором данных. 📊
2. Очистка и предобработка данных
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
def preprocess_data(file_path, output_path=None, categorical_cols=None, numerical_cols=None):
"""Очищает и предобрабатывает данные из CSV-файла"""
# Загружаем данные
df = pd.read_csv(file_path)
# Если столбцы не указаны, определяем их автоматически
if categorical_cols is None:
categorical_cols = df.select_dtypes(include=['object', 'category']).columns.tolist()
if numerical_cols is None:
numerical_cols = df.select_dtypes(include=['int64', 'float64']).columns.tolist()
# Создаем процессоры для разных типов данных
numerical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())
])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('onehot', OneHotEncoder(handle_unknown='ignore'))
])
# Объединяем трансформации
preprocessor = ColumnTransformer(
transformers=[
('num', numerical_transformer, numerical_cols),
('cat', categorical_transformer, categorical_cols)
])
# Применяем предобработку
try:
# Удаляем строки, где пропущены все значения
df = df.dropna(how='all')
# Удаляем дубликаты
duplicates_count = df.duplicated().sum()
df = df.drop_duplicates()
# Применяем трансформацию
processed_array = preprocessor.fit_transform(df)
# Получаем имена столбцов после one-hot encoding
onehot_columns = []
if categorical_cols:
onehot_encoder = preprocessor.named_transformers_['cat'].named_steps['onehot']
onehot_columns = onehot_encoder.get_feature_names_out(categorical_cols)
# Создаем новый DataFrame
column_names = numerical_cols + list(onehot_columns)
processed_df = pd.DataFrame(processed_array, columns=column_names)
# Сохраняем результат
if output_path is None:
base, ext = os.path.splitext(file_path)
output_path = f"{base}_preprocessed{ext}"
processed_df.to_csv(output_path, index=False)
# Формируем отчет о выполненных преобразованиях
report = {
"original_shape": df.shape,
"processed_shape": processed_df.shape,
"duplicates_removed": duplicates_count,
"missing_values": {
"before": df[numerical_cols + categorical_cols].isnull().sum().to_dict(),
"after": "All filled using imputation"
},
"scaling": "StandardScaler applied to numerical features",
"encoding": "OneHotEncoder applied to categorical features"
}
print(f"Предобработка завершена. Результат сохранен в {output_path}")
return output_path, report
except Exception as e:
print(f"Ошибка при предобработке данных: {e}")
return None, {"error": str(e)}
# Пример использования
output_file, report = preprocess_data(
"/path/to/data.csv",
categorical_cols=["gender", "country", "education"],
numerical_cols=["age", "salary", "experience"]
)
print(report)
Скрипт автоматизирует стандартные операции очистки данных: удаление дубликатов, заполнение пропущенных значений, масштабирование числовых признаков и кодирование категориальных переменных. 🧹
Мария Соколова, Data Scientist
Работая над проектом анализа клиентской базы крупного онлайн-ритейлера, я столкнулась с необходимостью регулярно обрабатывать и визуализировать данные о покупках для еженедельных отчетов руководству.
Данные приходили из нескольких источников в разных форматах и требовали значительной предобработки. Каждый понедельник я тратила около 4 часов на объединение таблиц, очистку данных и создание десятка стандартных визуализаций.
Я написала Python-скрипт, который автоматизировал весь процесс: подключался к API, загружал актуальные данные, выполнял необходимую предобработку, создавал все нужные графики и генерировал PDF-отчет с комментариями.
Теперь вместо 4 часов ручной работы я запускаю скрипт и через 5 минут получаю готовый отчет. За год использования этого решения удалось
Читайте также
- Выбор языка программирования: где Python действительно выигрывает
- Интеграция Python и R-Studio: мощный тандем в анализе данных
- Почему в Python нет операторов ++ и -- и какие альтернативы использовать
- Интеграция API WhatsApp и Discord с Python: мощная автоматизация
- Python: компилируемый или интерпретируемый язык, правда скрыта
- Lambda-функции в Python: мощные однострочные условия для кода
- Настройка Python в Visual Studio: полное руководство для разработчиков
- Массивы в Python: особенности, отличия, эффективное применение
- Python и Go: сравнение языков программирования для разработчиков
- Магические методы Python: превращение кода в элегантное решение