告别重复劳动,提升工作效率!这里为你精选了8个实用的Python自动化脚本,覆盖了文件管理、数据处理、网络操作和系统监控等多个场景,让你从繁琐的日常任务中解放出来。
📁 1. 智能文件整理
告别杂乱的下载文件夹! 这个脚本能根据文件后缀名,自动将文件移动到对应的分类文件夹中(如“图片”、“文档”、“音频”),无需手动拖拽。
import os
import shutil
def organize_files(directory):
# 定义文件类型和对应的文件夹
file_categories = {
'Images': ['.jpg', '.jpeg', '.png', '.gif'],
'Documents': ['.pdf', '.doc', '.docx', '.txt'],
'Audio': ['.mp3', '.wav', '.flac']
}
for filename in os.listdir(directory):
file_path = os.path.join(directory, filename)
if os.path.isfile(file_path):
for category, extensions in file_categories.items():
if any(filename.lower().endswith(ext) for ext in extensions):
# 创建目标文件夹(如果不存在)
target_folder = os.path.join(directory, category)
os.makedirs(target_folder, exist_ok=True)
# 移动文件
shutil.move(file_path, os.path.join(target_folder, filename))
print(f"Moved: {filename} -> {category}")
# 使用示例:整理当前目录下的文件
# organize_files('./Downloads')
✏️ 2. 批量重命名文件
统一命名,一步到位。 无论是添加前缀、后缀,还是替换文件名中的特定字符,这个脚本都能帮你快速完成。
import os
def batch_rename(folder_path, old_text, new_text):
for filename in os.listdir(folder_path):
if old_text in filename:
new_filename = filename.replace(old_text, new_text)
# 构造完整的文件路径
src = os.path.join(folder_path, filename)
dst = os.path.join(folder_path, new_filename)
os.rename(src, dst)
print(f"Renamed: {filename} -> {new_filename}")
# 使用示例:将文件夹中所有包含 'old' 的文件名替换为 'new'
# batch_rename('./my_files', 'old', 'new')
💾 3. 自动备份文件
操作前的“后悔药”。 在对重要文件或文件夹进行修改前,此脚本会自动创建带时间戳的备份,确保数据安全,随时可以回滚。
import shutil
import os
import time
def safe_backup(file_or_folder_path):
if not os.path.exists(file_or_folder_path):
print(f"路径不存在: {file_or_folder_path}")
return
# 生成带时间戳的备份名称
timestamp = time.strftime("%Y%m%d_%H%M%S")
backup_name = f"{os.path.basename(file_or_folder_path)}.backup.{timestamp}"
backup_path = os.path.join(os.path.dirname(file_or_folder_path), backup_name)
try:
# 复制文件或文件夹
if os.path.isfile(file_or_folder_path):
shutil.copy2(file_or_folder_path, backup_path)
else:
shutil.copytree(file_or_folder_path, backup_path)
print(f"备份成功: {backup_path}")
except Exception as e:
print(f"备份失败: {e}")
# 使用示例:备份一个配置文件
# safe_backup('app_config.yaml')
📊 4. 自动化Excel报表生成
告别手动合并数据。 自动从多个CSV或Excel文件中读取数据,进行合并、计算和汇总,最终生成一份整洁的日报或周报。
import pandas as pd
from datetime import datetime
def generate_daily_report():
# 读取多个数据源
df_sales = pd.read_csv('sales_data.csv')
df_costs = pd.read_excel('cost_data.xlsx')
# 合并数据
merged_df = pd.merge(df_sales, df_costs, on='product_id', how='left')
# 计算利润
merged_df['profit'] = merged_df['sales'] - merged_df['cost']
# 按类别汇总
summary = merged_df.groupby('category')['profit'].sum().reset_index()
# 生成带日期的报表文件名
today = datetime.now().strftime('%Y%m%d')
output_file = f'daily_report_{today}.xlsx'
summary.to_excel(output_file, index=False)
print(f'日报已生成:{output_file}')
# generate_daily_report()
🕸️ 5. 网页数据抓取
高效收集网络信息。 自动从指定网页抓取标题、价格等特定信息,并整理保存到CSV文件中,是进行市场调研或数据采集的利器。
import requests
from bs4 import BeautifulSoup
import csv
def scrape_webpage(url, output_csv):
headers = {'User-Agent': 'Mozilla/5.0'} # 伪装浏览器
try:
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
data_rows = []
# 假设要抓取所有文章标题和链接
for article in soup.find_all('article'):
title_tag = article.find('h2')
if title_tag and title_tag.a:
title = title_tag.a.text.strip()
link = title_tag.a['href']
data_rows.append([title, link])
# 保存到CSV
with open(output_csv, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['标题', '链接'])
writer.writerows(data_rows)
print(f"成功抓取 {len(data_rows)} 条数据至 {output_csv}")
except Exception as e:
print(f"抓取失败: {e}")
# scrape_webweb('http://example-blog.com', 'results.csv')
🖼️ 6. 图片批量处理
一键压缩或调整尺寸。 运营和设计人员经常需要处理大量图片,这个脚本可以批量压缩图片大小或统一调整尺寸,节省大量时间。
from PIL import Image
import os
def batch_compress_images(folder_path, quality=80):
for filename in os.listdir(folder_path):
if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
img_path = os.path.join(folder_path, filename)
img = Image.open(img_path)
# 保存压缩后的图片
output_path = os.path.join(folder_path, f'compressed_{filename}')
img.save(output_path, quality=quality, optimize=True)
print(f"压缩完成: {filename}")
# 使用示例:压缩指定文件夹中的所有图片
# batch_compress_images('./product_images', quality=75)
📧 7. 自动发送邮件
定时发送报告或通知。 无论是发送项目进度邮件还是系统告警通知,都可以用这个脚本自动完成,无需手动操作。
import smtplib
from email.mime.text import MIMEText
def send_email(subject, body, to_list):
sender_email = 'your_email@example.com'
sender_password = 'your_password' # 注意:生产环境中请使用更安全的方式存储密码
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = ', '.join(to_list)
try:
# 以Gmail为例
with smtplib.SMTP('smtp.gmail.com', 587) as server:
server.starttls()
server.login(sender_email, sender_password)
server.send_message(msg)
print("邮件发送成功!")
except Exception as e:
print(f"邮件发送失败: {e}")
# 使用示例
# send_email(subject='项目周报', body='本周工作已完成...', to_list=['team@example.com'])
💻 8. 系统资源监控
主动防御,告别卡顿。 监控特定进程(如Python进程)的CPU占用率,一旦发现超过设定阈值,就自动终止该进程,防止系统因单个失控程序而卡死。
import psutil
CPU_THRESHOLD = 80.0 # CPU占用阈值
PROCESS_NAME = "python" # 监控的进程名
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
try:
# 检查进程名是否匹配
if proc.info['name'] and PROCESS_NAME.lower() in proc.info['name'].lower():
# 获取CPU占用率(注意:首次调用可能返回0,循环监控时更准确)
cpu_usage = proc.cpu_percent(interval=0.1)
if cpu_usage > CPU_THRESHOLD:
print(f"检测到高负载进程: PID {proc.info['pid']} (CPU: {cpu_usage}%)")
proc.kill()
print("进程已终止。")
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass