前置要求

pip install requests beautifulsoup4 openpyxl

1. 批量图片下载器

目标:根据 URL 列表批量下载图片

import requests
import os
from urllib.parse import urlparse

def download_images(urls, folder='images'):
    os.makedirs(folder, exist_ok=True)
    
    for url in urls:
        try:
            response = requests.get(url, timeout=10)
            filename = os.path.basename(urlparse(url).path)
            filepath = os.path.join(folder, filename)
            
            with open(filepath, 'wb') as f:
                f.write(response.content)
            print(f"下载成功: {filename}")
        except Exception as e:
            print(f"下载失败 {url}: {e}")

urls = [
    "https://example.com/image1.jpg",
    "https://example.com/image2.jpg",
]
# download_images(urls)

知识点requests 下载、os.makedirs、URL 解析


2. Excel 报表合并工具

目标:合并多个 Excel 文件的数据

import pandas as pd
import glob

def merge_excel_files(pattern, output_file='merged.xlsx'):
    files = glob.glob(pattern)
    all_data = []
    
    for file in files:
        df = pd.read_excel(file)
        df['来源文件'] = os.path.basename(file)
        all_data.append(df)
    
    merged = pd.concat(all_data, ignore_index=True)
    merged.to_excel(output_file, index=False)
    print(f"已合并 {len(files)} 个文件,输出: {output_file}")
    return merged

# merge_excel_files('sales_*.xlsx', 'total_sales.xlsx')

知识点pandas 读取 Excel、glob 文件匹配、pd.concat


3. 邮件自动发送脚本

目标:批量发送定制化邮件

import smtplib
from email.mime.text import MIMEText
from email.header import Header

def send_email(sender, password, receiver, subject, content):
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['From'] = sender
    msg['To'] = receiver
    msg['Subject'] = Header(subject, 'utf-8')
    
    with smtplib.SMTP_SSL('smtp.qq.com', 465) as server:
        server.login(sender, password)
        server.sendmail(sender, [receiver], msg.as_string())
    print(f"邮件已发送至 {receiver}")

def batch_send(sender, password, recipients, template):
    for name, email in recipients.items():
        content = template.format(name=name)
        send_email(sender, password, email, "活动通知", content)

# recipients = {"张三": "zhangsan@example.com"}
# template = "尊敬的 {name},您好!请查收本月活动安排。"
# batch_send("your_email@qq.com", "your_password", recipients, template)

知识点smtplib 邮件发送、MIMEText 邮件格式、批量处理


4. PDF 文件批量合并

目标:使用 PyPDF2 合并多个 PDF 文件

from PyPDF2 import PdfMerger
import glob

def merge_pdfs(pattern, output='merged.pdf'):
    merger = PdfMerger()
    files = sorted(glob.glob(pattern))
    
    for file in files:
        merger.append(file)
        print(f"已添加: {file}")
    
    merger.write(output)
    merger.close()
    print(f"\n合并完成!共 {len(files)} 个文件 → {output}")

# 使用示例
# merge_pdfs('chapter_*.pdf', '完整文档.pdf')

知识点PyPDF2、PDF 合并、glob 排序


5. 网站状态监控脚本

目标:定时检测网站可用性并记录日志

import requests
import time
from datetime import datetime

urls = [
    'https://www.baidu.com',
    'https://www.github.com',
]

def monitor(urls, interval=60):
    print(f"开始监控 {len(urls)} 个网站...")
    while True:
        timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        for url in urls:
            try:
                start = time.time()
                resp = requests.get(url, timeout=10)
                elapsed = (time.time() - start) * 1000
                status = f"✓ {resp.status_code} ({elapsed:.0f}ms)"
            except Exception as e:
                status = f"✗ {e}"
            print(f"[{timestamp}] {url} {status}")
        print("-" * 50)
        time.sleep(interval)

# monitor(urls, interval=300)

知识点requests 超时、time 计时、日志记录、循环监控


6. 自动备份文件夹

目标:按日期自动备份指定文件夹

import shutil
import os
from datetime import datetime

def backup_folder(source, backup_dir='backups'):
    os.makedirs(backup_dir, exist_ok=True)
    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
    backup_name = f"backup_{timestamp}"
    backup_path = os.path.join(backup_dir, backup_name)
    
    shutil.make_archive(backup_path, 'zip', source)
    size = os.path.getsize(backup_path + '.zip') / 1024 / 1024
    print(f"备份完成: {backup_path}.zip ({size:.2f} MB)")
    return backup_path + '.zip'

# backup_folder('./my_project')

知识点shutil.make_archive、zip 压缩、时间戳命名