告别重复劳动,提升工作效率!这里为你精选了8个实用的Python自动化脚本

5 阅读5分钟

告别重复劳动,提升工作效率!这里为你精选了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