前言
作为一名程序员或运维工程师,日常工作中总有许多重复性的任务让人头疼。Python 凭借其简洁的语法和丰富的第三方库,成为编写自动化脚本的首选语言。本文整理了10个超实用的 Python 脚本,涵盖文件处理、数据分析、网络请求、办公自动化等场景,每个脚本都能直接运行,帮你节省大量时间。
1. 批量重命名文件脚本
面对文件夹中成百上千个命名混乱的文件,手动修改几乎不可能。这个脚本可以批量添加前缀、替换关键词,或按序号重命名。
import os
def batch_rename(folder_path, old_str, new_str):
"""批量替换文件名中的指定字符串"""
count = 0
for filename in os.listdir(folder_path):
if old_str in filename:
old_path = os.path.join(folder_path, filename)
new_filename = filename.replace(old_str, new_str)
new_path = os.path.join(folder_path, new_filename)
os.rename(old_path, new_path)
count += 1
print(f"重命名: {filename} -> {new_filename}")
print(f"共重命名 {count} 个文件")
# 用法示例:将当前目录下所有文件名中的 '副本' 替换为 'backup'
batch_rename('./', '副本', 'backup')
2. 图片批量压缩脚本
博客配图、网站图片需要在保证质量的前提下尽量压缩体积。使用 Pillow 库可以批量压缩图片。
from PIL import Image
import os
def compress_images(input_dir, output_dir, quality=75):
"""批量压缩图片,quality=75 为推荐值"""
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.webp')):
img_path = os.path.join(input_dir, filename)
img = Image.open(img_path)
# 转为RGB(处理RGBA格式的PNG)
if img.mode in ('RGBA', 'P'):
img = img.convert('RGB')
output_path = os.path.join(output_dir, filename)
img.save(output_path, 'JPEG', quality=quality, optimize=True)
orig_size = os.path.getsize(img_path) // 1024
new_size = os.path.getsize(output_path) // 1024
print(f"{filename}: {orig_size}KB -> {new_size}KB (压缩率: {new_size/orig_size*100:.1f}%)")
compress_images('./images', './images_compressed', quality=70)
3. PDF 合并与拆分脚本
处理 PDF 文件是办公自动化中的常见需求,PyPDF2 库可以轻松实现合并和拆分。
from PyPDF2 import PdfMerger, PdfReader, PdfWriter
# 合并多个PDF
def merge_pdfs(pdf_list, output_path):
merger = PdfMerger()
for pdf in pdf_list:
merger.append(pdf)
merger.write(output_path)
merger.close()
print(f"已合并 {len(pdf_list)} 个PDF -> {output_path}")
merge_pdfs(['doc1.pdf', 'doc2.pdf', 'doc3.pdf'], 'merged.pdf')
# 拆分PDF(按页码范围)
def split_pdf(input_path, start_page, end_page, output_path):
reader = PdfReader(input_path)
writer = PdfWriter()
for i in range(start_page - 1, min(end_page, len(reader.pages))):
writer.add_page(reader.pages[i])
with open(output_path, 'wb') as f:
writer.write(f)
print(f"已拆分第 {start_page}-{end_page} 页 -> {output_path}")
split_pdf('merged.pdf', 1, 5, 'part1.pdf')
4. 网页内容爬取脚本
使用 requests + BeautifulSoup 快速抓取网页内容,是数据分析的第一步。
import requests
from bs4 import BeautifulSoup
import csv
def scrape_news(url, output_csv):
"""爬取新闻标题和链接,保存到CSV"""
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)'}
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = resp.apparent_encoding
soup = BeautifulSoup(resp.text, 'html.parser')
results = []
# 以H3标签为例,实际根据目标网站调整选择器
for item in soup.select('h3 a'):
title = item.get_text(strip=True)
link = item.get('href', '')
if link and not link.startswith('http'):
link = url.rstrip('/') + '/' + link.lstrip('/')
results.append({'title': title, 'link': link})
with open(output_csv, 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=['title', 'link'])
writer.writeheader()
writer.writerows(results)
print(f"已保存 {len(results)} 条数据 -> {output_csv}")
# scrape_news('https://example.com/news', 'news.csv')
print("请替换目标URL后取消注释运行")
5. Excel/CSV 批量处理脚本
处理 Excel 报表是很多人的日常痛点,pandas 让这一切变得简单。
import pandas as pd
import glob
def process_excel_folder(folder_path, output_file):
"""合并文件夹中所有Excel文件,按指定列汇总"""
all_data = []
for file in glob.glob(f"{folder_path}/*.xlsx"):
df = pd.read_excel(file)
df['source_file'] = os.path.basename(file)
all_data.append(df)
print(f"已读取: {file} ({len(df)} 行)")
merged = pd.concat(all_data, ignore_index=True)
print(f"合并后共 {len(merged)} 行")
# 示例:按 '部门' 列分组求和(根据实际列名调整)
if '销售额' in merged.columns and '部门' in merged.columns:
summary = merged.groupby('部门')['销售额'].sum().reset_index()
summary.to_excel('部门汇总.xlsx', index=False)
print("已生成部门汇总.xlsx")
merged.to_excel(output_file, index=False)
print(f"已保存合并结果 -> {output_file}")
# process_excel_folder('./reports', 'all_reports.xlsx')
6. 自动整理文件脚本
下载文件夹总是乱七八糟?这个脚本按文件类型自动分类整理。
import os
import shutil
from pathlib import Path
def organize_files(folder_path):
"""按文件扩展名分类整理文件"""
extensions_map = {
'图片': ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg'],
'文档': ['.pdf', '.docx', '.doc', '.txt', '.md', '.pptx', '.xlsx'],
'压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz'],
'视频': ['.mp4', '.avi', '.mov', '.mkv', '.flv'],
'音频': ['.mp3', '.wav', '.flac', '.aac'],
'代码': ['.py', '.js', '.html', '.css', '.json', '.xml'],
}
for file in os.listdir(folder_path):
file_path = os.path.join(folder_path, file)
if os.path.isfile(file_path):
ext = os.path.splitext(file)[1].lower()
target_folder = '其他'
for folder, exts in extensions_map.items():
if ext in exts:
target_folder = folder
break
target_path = os.path.join(folder_path, target_folder)
os.makedirs(target_path, exist_ok=True)
shutil.move(file_path, os.path.join(target_path, file))
print(f"移动: {file} -> {target_folder}/")
print("文件整理完成!")
organize_files('./downloads')
7. 定时发送邮件脚本
结合 cron 定时任务,可以实现每日自动发送报告邮件。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os
def send_email(smtp_server, smtp_port, sender, password, receivers,
subject, body, attachments=None):
"""发送带附件的邮件"""
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = ', '.join(receivers)
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain', 'utf-8'))
# 添加附件
if attachments:
for filepath in attachments:
with open(filepath, 'rb') as f:
part = MIMEBase('application', 'octet-stream')
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',
f'attachment; filename="{os.path.basename(filepath)}"')
msg.attach(part)
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls()
server.login(sender, password)
server.sendmail(sender, receivers, msg.as_string())
print(f"邮件已发送至 {receivers}")
# 用法示例(请替换为真实配置)
# send_email('smtp.qq.com', 587,
# 'your_email@qq.com', '邮箱授权码',
# ['receiver@example.com'],
# '每日数据报告', '请查收附件中的数据报告',
# attachments=['report.xlsx'])
print("请配置SMTP信息后取消注释运行")
8. 系统资源监控脚本
监控服务器 CPU、内存、磁盘使用率,超过阈值自动告警。
import psutil
import time
import smtplib
from datetime import datetime
def monitor_system(cpu_threshold=80, mem_threshold=85, disk_threshold=90):
"""监控系统资源,超阈值打印告警"""
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory()
disk = psutil.disk_usage('/')
report = f"""系统监控报告 [{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}]
CPU使用率: {cpu}%
内存使用率: {mem.percent}% (已用 {mem.used//1024//1024}MB / 总计 {mem.total//1024//1024}MB)
磁盘使用率: {disk.percent}% (已用 {disk.used//1024//1024//1024}GB / 总计 {disk.total//1024//1024//1024}GB)
"""
print(report)
alerts = []
if cpu > cpu_threshold:
alerts.append(f"⚠️ CPU使用率超标: {cpu}% > {cpu_threshold}%")
if mem.percent > mem_threshold:
alerts.append(f"⚠️ 内存使用率超标: {mem.percent}% > {mem_threshold}%")
if disk.percent > disk_threshold:
alerts.append(f"⚠️ 磁盘使用率超标: {disk.percent}% > {disk_threshold}%")
if alerts:
print("告警信息:")
for alert in alerts:
print(alert)
else:
print("✅ 所有指标正常")
return alerts
# 每60秒监控一次,持续运行
if __name__ == '__main__':
while True:
monitor_system()
time.sleep(60)
9. 二维码生成与识别脚本
生成二维码用于分享链接,或识别图片中的二维码内容。
import qrcode
from PIL import Image
from pyzbar.pyzbar import decode
def generate_qr(data, output_path, logo_path=None):
"""生成二维码,可选添加中心Logo"""
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10, border=4)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color='black', back_color='white').convert('RGB')
# 添加Logo
if logo_path and os.path.exists(logo_path):
logo = Image.open(logo_path)
qr_size = img.size[0]
logo_size = qr_size // 5
logo = logo.resize((logo_size, logo_size))
pos = ((qr_size - logo_size) // 2, (qr_size - logo_size) // 2)
img.paste(logo, pos)
img.save(output_path)
print(f"二维码已保存 -> {output_path}")
def decode_qr(image_path):
"""识别图片中的二维码"""
img = Image.open(image_path)
results = decode(img)
for result in results:
print(f"类型: {result.type}, 内容: {result.data.decode('utf-8')}")
return [r.data.decode('utf-8') for r in results]
# 生成二维码示例
generate_qr('https://xjahb.cn', 'site_qr.png')
# 识别二维码示例
# decode_qr('site_qr.png')
10. 日志文件分析脚本
分析 Nginx/应用日志,统计访问量、错误率等关键指标。
import re
from collections import Counter
from datetime import datetime
def analyze_nginx_log(log_path, top_n=10):
"""分析Nginx访问日志"""
ip_counter = Counter()
url_counter = Counter()
status_counter = Counter()
total = 0
# Nginx默认日志格式正则
log_pattern = re.compile(
r'(?P\d+\.\d+\.\d+\.\d+).*?\[(?P
总结
以上10个 Python 脚本涵盖了日常工作中最常见的自动化场景。建议将每个脚本保存为独立文件,并根据实际需求调整参数。配合 Linux crontab 或 Windows 任务计划程序,可以实现完全无人值守的自动化工作流。
温馨提示:运行前请使用 pip 安装所需第三方库:
pip install Pillow PyPDF2 requests beautifulsoup4 pandas openpyxl psutil qrcode pyzbar
你有哪些重复性工作最希望自动化?欢迎在评论区分享,说不定下期就帮你写出来!















暂无评论内容