包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取!】
作为Python开发者,掌握一些强大的自动化库可以极大提升工作效率。本文将介绍10个Python中最实用、最强大的自动化库,涵盖文件处理、Web自动化、GUI自动化、任务调度等多个领域,每个库都配有详细的使用示例和应用场景分析。
1. os 和 shutil - 文件和目录自动化
应用场景:批量文件操作、目录整理、备份自动化
import os
import shutil
# 批量重命名文件
def batch_rename(folder, prefix):
for count, filename in enumerate(os.listdir(folder)):
dst = f"{prefix}_{str(count)}.{filename.split('.')[-1]}"
src = os.path.join(folder, filename)
dst = os.path.join(folder, dst)
os.rename(src, dst)
# 自动整理文件到不同目录
def organize_files(folder):
for filename in os.listdir(folder):
if filename.endswith(('.png', '.jpg', '.jpeg')):
if not os.path.exists(os.path.join(folder, 'images')):
os.makedirs(os.path.join(folder, 'images'))
shutil.move(os.path.join(folder, filename),
os.path.join(folder, 'images', filename))
elif filename.endswith(('.pdf', '.docx', '.txt')):
if not os.path.exists(os.path.join(folder, 'documents')):
os.makedirs(os.path.join(folder, 'documents'))
shutil.move(os.path.join(folder, filename),
os.path.join(folder, 'documents', filename))
# 使用示例
batch_rename('/path/to/photos', 'vacation')
organize_files('/path/to/downloads')
2. pathlib - 面向对象的文件系统路径操作
应用场景:更优雅的路径操作,跨平台兼容
from pathlib import Path
# 创建目录结构
def setup_project(project_name):
project_path = Path(project_name)
(project_path / 'src').mkdir(parents=True, exist_ok=True)
(project_path / 'tests').mkdir(exist_ok=True)
(project_path / 'docs').mkdir(exist_ok=True)
# 创建README.md
readme = project_path / 'README.md'
readme.write_text(f"# {project_name}\n\nProject description here.")
# 创建.gitignore
gitignore = project_path / '.gitignore'
gitignore.write_text("__pycache__/\n*.pyc\n*.pyo\n")
# 查找特定文件
def find_files(directory, extension):
path = Path(directory)
return list(path.glob(f'**/*.{extension}'))
# 使用示例
setup_project('my_awesome_project')
python_files = find_files('/path/to/project', 'py')
3. watchdog - 文件系统监控自动化
应用场景:自动处理新文件、实时同步、自动备份
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
class MyHandler(FileSystemEventHandler):
def on_created(self, event):
print(f"新文件创建: {event.src_path}")
# 在这里添加对新文件的操作
def on_modified(self, event):
print(f"文件修改: {event.src_path}")
# 在这里添加对修改文件的操作
def monitor_folder(path):
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
# 使用示例
monitor_folder('/path/to/watch')
4. selenium - Web浏览器自动化
应用场景:Web测试、数据抓取、表单自动填写
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def automate_web_task():
# 初始化浏览器驱动 (需要下载对应浏览器的驱动)
driver = webdriver.Chrome()
try:
# 打开网页
driver.get("https://www.baidu.com")
# 查找搜索框并输入内容
search_box = driver.find_element(By.NAME, 'wd')
search_box.send_keys("Python自动化")
search_box.send_keys(Keys.RETURN)
# 等待结果加载
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "content_left"))
# 获取搜索结果
results = driver.find_elements(By.CSS_SELECTOR, 'h3.t a')
for result in results[:5]:
print(result.text, result.get_attribute('href'))
finally:
driver.quit()
# 使用示例
automate_web_task()
5. pyautogui - GUI自动化
应用场景:桌面应用自动化、游戏脚本、重复性GUI操作
import pyautogui
import time
def automate_gui_tasks():
# 安全设置 - 鼠标移动到左上角会触发异常
pyautogui.FAILSAFE = True
# 获取屏幕尺寸
screen_width, screen_height = pyautogui.size()
# 移动鼠标到屏幕中央并点击
pyautogui.moveTo(screen_width/2, screen_height/2, duration=1)
pyautogui.click()
# 输入文字
pyautogui.typewrite('Hello, world!', interval=0.1)
pyautogui.press('enter')
# 截图并保存
time.sleep(2)
screenshot = pyautogui.screenshot()
screenshot.save('screenshot.png')
# 图像识别点击 (需要提前保存目标图片)
try:
button_location = pyautogui.locateOnScreen('button.png')
if button_location:
pyautogui.click(button_location)
except pyautogui.ImageNotFoundException:
print("按钮图片未找到")
# 使用示例
automate_gui_tasks()
6. schedule - 任务调度自动化
应用场景:定时任务、周期任务、自动化报表
import schedule
import time
def job():
print("定时任务执行中...")
# 这里添加你的任务代码
def daily_report():
print("生成日报中...")
# 生成日报的逻辑
def backup_database():
print("数据库备份中...")
# 备份数据库的逻辑
# 设置定时任务
schedule.every(10).minutes.do(job) # 每10分钟执行一次
schedule.every().hour.do(job) # 每小时执行一次
schedule.every().day.at("10:30").do(daily_report) # 每天10:30执行
schedule.every().sunday.at("12:00").do(backup_database) # 每周日12:00执行
# 运行调度器
while True:
schedule.run_pending()
time.sleep(1)
7. paramiko - SSH自动化
应用场景:远程服务器管理、批量执行命令、文件传输
import paramiko
def automate_ssh():
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# 连接服务器
ssh.connect('example.com', username='user', password='password')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls -l /tmp')
print(stdout.read().decode())
# 使用SFTP传输文件
sftp = ssh.open_sftp()
sftp.put('local_file.txt', 'remote_file.txt') # 上传
sftp.get('remote_file.txt', 'local_copy.txt') # 下载
sftp.close()
finally:
ssh.close()
# 使用示例
automate_ssh()
8. openpyxl 和 pandas - Excel自动化
应用场景:Excel报表生成、数据处理、批量修改
import openpyxl
from openpyxl.styles import Font, Alignment
import pandas as pd
def automate_excel():
# 使用openpyxl创建Excel文件
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "销售数据"
# 添加数据
data = [
["产品", "销量", "收入"],
["A", 150, 4500],
["B", 200, 6000],
["C", 180, 5400]
]
for row in data:
ws.append(row)
# 设置样式
header_font = Font(bold=True)
for cell in ws[1]:
cell.font = header_font
cell.alignment = Alignment(horizontal='center')
# 保存文件
wb.save("sales_report.xlsx")
# 使用pandas处理Excel数据
df = pd.read_excel("sales_report.xlsx")
df["单价"] = df["收入"] / df["销量"]
df.to_excel("sales_report_with_price.xlsx", index=False)
# 使用示例
automate_excel()
9. smtplib 和 email - 邮件自动化
应用场景:自动发送邮件、邮件通知、批量邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
def send_automated_email():
# 邮件配置
sender = "your_email@example.com"
password = "your_password"
recipients = ["recipient1@example.com", "recipient2@example.com"]
# 创建邮件
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = ", ".join(recipients)
msg['Subject'] = "自动化测试邮件"
# 邮件正文
body = """
<h1>这是一封自动发送的邮件</h1>
<p>Python自动化真是太方便了!</p>
"""
msg.attach(MIMEText(body, 'html'))
# 添加附件
with open("sales_report.xlsx", "rb") as f:
attach = MIMEApplication(f.read(), _subtype="xlsx")
attach.add_header('Content-Disposition', 'attachment',
filename="销售报表.xlsx")
msg.attach(attach)
# 发送邮件
try:
with smtplib.SMTP_SSL('smtp.example.com', 465) as server:
server.login(sender, password)
server.sendmail(sender, recipients, msg.as_string())
print("邮件发送成功!")
except Exception as e:
print(f"邮件发送失败: {str(e)}")
# 使用示例
send_automated_email()
10. fabric - 部署自动化
应用场景:自动化部署、远程服务器管理、批量任务
from fabric import Connection, task
@task
def deploy(c):
"""部署应用到服务器"""
# 连接服务器
conn = Connection('user@example.com')
# 在服务器上执行命令
conn.run('cd /var/www/myapp && git pull')
conn.run('cd /var/www/myapp && pip install -r requirements.txt')
conn.run('sudo systemctl restart myapp')
print("部署成功完成!")
@task
def backup_db(c):
"""备份数据库"""
conn = Connection('user@example.com')
# 创建数据库备份
conn.run('pg_dump mydb > /backups/mydb_$(date +%Y%m%d).sql')
conn.run('gzip /backups/mydb_$(date +%Y%m%d).sql')
print("数据库备份完成!")
# 使用示例 (在命令行执行: fab deploy 或 fab backup_db)
进阶技巧:组合使用多个库实现复杂自动化
import os
import schedule
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import pandas as pd
import smtplib
from email.mime.text import MIMEText
class ReportGenerator(FileSystemEventHandler):
def on_created(self, event):
if event.src_path.endswith('.csv'):
self.process_csv(event.src_path)
def process_csv(self, filepath):
# 读取CSV文件
df = pd.read_csv(filepath)
# 数据处理
summary = df.groupby('category').agg({'sales': 'sum', 'profit': 'sum'})
# 生成Excel报表
report_path = os.path.join(os.path.dirname(filepath),
'sales_report.xlsx')
summary.to_excel(report_path)
# 发送邮件通知
self.send_notification(report_path)
def send_notification(self, attachment):
msg = MIMEText("新的销售报表已生成,请查收附件。")
msg['Subject'] = '销售报表通知'
msg['From'] = 'reports@example.com'
msg['To'] = 'manager@example.com'
with open(attachment, 'rb') as f:
msg.attach(f.read())
with smtplib.SMTP('smtp.example.com') as server:
server.send_message(msg)
def daily_backup():
# 这里是备份逻辑
print("执行每日备份...")
def start_monitoring():
observer = Observer()
observer.schedule(ReportGenerator(), '/data/incoming', recursive=True)
observer.start()
# 设置每日备份任务
schedule.every().day.at("02:00").do(daily_backup)
try:
while True:
schedule.run_pending()
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
start_monitoring()
总结
这些Python自动化库覆盖了从文件操作到Web自动化、从任务调度到邮件发送的各个方面。掌握它们可以让你:
减少重复性工作,提升效率
实现复杂的自动化流程
专注于更有创造性的工作
构建强大的自动化工具和系统
小技巧:在实际项目中,你可以将这些库组合使用,构建更复杂的自动化解决方案。例如,你可以用watchdog监控文件夹变化,用pandas处理数据,然后用smtplib发送结果报告。
最后:
希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!
文末福利
最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【点击这里领取!】
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习