15 полезных Python-скриптов для автоматизации и работы с данными

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • начинающие и опытные программисты, ищущие решения для автоматизации рутинных задач на Python
  • разработчики, желающие улучшить свои навыки и повысить эффективность работы с данными и веб-технологиями
  • специалисты в области анализа данных и DevOps, нуждающиеся в готовых скриптах для упрощения процессов и оптимизации рабочего времени

    Python по праву считается универсальным языком-швейцарским ножом в арсенале любого разработчика. Простота синтаксиса сочетается с мощными возможностями, что делает создание эффективных скриптов доступным даже новичкам. Однако зачем изобретать велосипед, когда можно воспользоваться готовыми решениями? В этой статье я собрал 15 проверенных Python-скриптов, которые сэкономят вам часы работы и решат большинство типичных задач — от автоматизации рутины до сложной аналитики данных. 🐍💻

Хотите не просто копировать готовые скрипты, а научиться создавать собственные решения на Python? Обучение Python-разработке от Skypro — это практический курс, где вы освоите не только базовые концепции, но и продвинутые техники программирования. За 9 месяцев вы пройдете путь от новичка до разработчика, способного автоматизировать любые задачи и создавать веб-приложения. Гарантированное трудоустройство или возврат средств! 🚀

Python-скрипты для автоматизации рутинных задач (5 решений)

Автоматизация рутинных задач — первое, что приходит на ум, когда речь заходит о применении Python в повседневной работе. Представляю вам пять готовых скриптов, которые избавят вас от монотонной работы и высвободят время для более важных задач.

1. Мониторинг системных ресурсов

Python
Скопировать код
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. Автоматическая сортировка файлов по папкам

Python
Скопировать код
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-отчетов

Python
Скопировать код
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. Автоматическое резервное копирование файлов

Python
Скопировать код
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. Автоматический перевод текстовых файлов

Python
Скопировать код
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-файлов и генерация отчетов

Python
Скопировать код
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. Очистка и предобработка данных

Python
Скопировать код
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 минут получаю готовый отчет. За год использования этого решения удалось

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какую библиотеку нужно использовать для отправки электронных писем в примере скрипта?
1 / 5

Загрузка...