昨天写了一篇介绍如何使用Python实现自动化任务的,文章末尾介绍了一个简单的自动化脚本,因此今天编号从2开始。顺便附上昨天的文章链接:
欢迎关注博主,持续输出更多Python相关内容,一起学习进步。
2. 用 PyAutoGUI 自动化任务
PyAutoGUI 是一个 Python 库,允许你通过控制鼠标和键盘来自动化 GUI(图形用户界面)任务。它提供了一个简单直观的 API,用于模拟用户与图形用户界面的交互。利用 PyAutoGUI,你可以自动执行重复性任务,比如填写表单、点击按钮、输入文本和截屏。它支持跨平台自动化,兼容于 Windows、macOS 和 Linux。下面是一个使用 PyAutoGUI 自动执行简单任务的示例:
import pyautogui
import time
# 等待 2 秒钟,让用户切换到所需窗口
time.sleep(2)
# 打开文本编辑器(假设它在 macOS 的应用程序文件夹中)
pyautogui.press('command')
pyautogui.typewrite('space')
pyautogui.typewrite('textedit')
pyautogui.press('enter')
# 等待文本编辑器打开
time.sleep(2)
# 输入消息
pyautogui.typewrite('Hello, World!')
# 保存文件
pyautogui.hotkey('command', 's')
pyautogui.typewrite('message.txt')
pyautogui.press('enter')
# 关闭文本编辑器
pyautogui.hotkey('command', 'q')
PyAutoGUI 提供了许多鼠标和键盘控制的函数,包括移动鼠标、点击、拖拽、输入文本和按键。它还提供图像识别功能,允许你定位并与屏幕上的特定图形元素进行交互。PyAutoGUI 特别适用于自动化涉及与桌面应用程序交互或在多个软件工具之间执行重复操作的任务。
3. 使用 Pandas 自动化数据分析
Pandas 是一个功能强大的 Python 库,用于数据处理和分析。它提供了数据结构和函数,使得处理结构化数据(如电子表格或 SQL 数据库中的表格数据)变得简单。通过 Pandas,你可以自动执行各种数据分析任务,包括数据清洗、转换、筛选、聚合和可视化。它与其他 Python 库(如 NumPy 用于数值计算和 Matplotlib 用于数据可视化)结合良好。下面是一个使用 Pandas 自动分析包含销售数据的 CSV 文件的示例:
import pandas as pd
# 读取 CSV 文件到 DataFrame
df = pd.read_csv('sales_data.csv')
# 显示 DataFrame 的前几行
print(df.head())
# 按产品类别计算总销售额
sales_by_category = df.groupby('Category')['Sales'].sum()
print(sales_by_category)
# 过滤 DataFrame,只包括销售额高于一定阈值的行
high_sales = df[df['Sales'] > 1000]
print(high_sales)
# 基于条件创建新列
df['Discount'] = df['Price'].apply(lambda x: 0.1 if x > 50 else 0)
print(df.head())
# 将修改后的 DataFrame 保存到新的 CSV 文件
df.to_csv('updated_sales_data.csv', index=False)
在这个示例中,使用 Pandas 将 CSV 文件读取到 DataFrame 中,DataFrame 是一个二维带标签的数据结构。然后我们可以对 DataFrame 执行各种操作,比如显示前几行、按产品类别计算总销售额、基于条件过滤行、创建新列,并将修改后的数据保存到新的 CSV 文件中。Pandas 提供了许多用于数据操作的函数,包括合并、重塑和聚合数据。它还支持处理缺失数据、处理时间序列数据和执行统计分析。通过利用 Pandas,你可以自动执行重复性的数据分析任务,节省时间和精力,从大型数据集中提取见解。
4. 使用 PyTest 进行测试自动化
测试自动化对于确保软件应用程序的质量和可靠性至关重要。Python 提供了几个测试框架,其中最流行和功能丰富的框架之一是 PyTest。PyTest 是一个测试框架,它简化了编写和运行 Python 代码的测试。它为定义测试用例、断言和测试固件提供了简单和表达性的语法。PyTest 支持各种类型的测试,包括单元测试、集成测试和功能测试。下面是一个使用 PyTest 自动化测试简单 Python 函数的示例:
# calculator.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
# test_calculator.py
import pytest
from calculator import add, subtract
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
assert add(0, 0) == 0
def test_subtract():
assert subtract(5, 3) == 2
assert subtract(-1, 1) == -2
assert subtract(0, 0) == 0
def test_add_invalid_input():
with pytest.raises(TypeError):
add('2', 3)
def test_subtract_invalid_input():
with
5. 演示:用于文件组织的 Python 脚本
为了展示 Python 自动化的强大功能,让我们通过一个实际的例子来演示如何自动组织文件。假设你有一个文件夹,其中包含各种文件 — 文档、图片、视频等。手动将这些文件分类到适当的子文件夹中可能是一个繁琐的任务。然而,通过一个 Python 脚本,我们可以轻松地自动完成这个任务。下面
是一个样本 Python 脚本,根据文件扩展名来组织文件:
import os
import shutil
# 定义主文件夹路径
main_folder = "/path/to/your/folder"
# 为不同类型的文件创建子文件夹
subfolders = {
"Documents": [".pdf", ".doc", ".docx", ".txt"],
"Images": [".jpg", ".jpeg", ".png", ".gif"],
"Videos": [".mp4", ".avi", ".mov"],
"Audio": [".mp3", ".wav", ".aac"],
"Others": []
}
# 遍历主文件夹中的文件
for filename in os.listdir(main_folder):
file_path = os.path.join(main_folder, filename)
# 检查是否为文件(而不是文件夹)
if os.path.isfile(file_path):
# 获取文件扩展名
_, extension = os.path.splitext(filename)
# 确定适当的子文件夹
subfolder = "Others"
for folder, extensions in subfolders.items():
if extension.lower() in extensions:
subfolder = folder
break
# 如果子文件夹不存在,则创建它
subfolder_path = os.path.join(main_folder, subfolder)
os.makedirs(subfolder_path, exist_ok=True)
# 将文件移动到适当的子文件夹中
destination_path = os.path.join(subfolder_path, filename)
shutil.move(file_path, destination_path)
print(f"Moved {filename} to {subfolder} folder.")
让我们逐步解释这个脚本:
- 我们导入所需的模块:
os
用于文件和目录操作,shutil
用于文件移动。 - 我们使用
main_folder
变量定义包含要组织的文件的文件夹路径。 - 我们创建一个名为
subfolders
的字典,将子文件夹名称映射到相应文件扩展名列表。“Others” 子文件夹用于未指定扩展名的文件。 - 我们使用
os.listdir()
遍历主文件夹中的每个文件。 - 对于每个文件,我们使用
os.path.isfile()
检查它是否为文件(而不是文件夹)。 - 我们使用
os.path.splitext()
提取文件扩展名。 - 我们根据扩展名检查文件应该归属的子文件夹,并将其移动到该子文件夹中。
- 最后,我们打印一条消息,指示文件的移动操作。
这个脚本演示了 Python 如何自动根据文件扩展名组织文件。通过运行这个脚本,指定文件夹中的所有文件将自动排序到适当的子文件夹中,节省你的时间和精力。
6. 自动发送电子邮件
Python 提供了 smtplib
模块用于通过 SMTP(简单邮件传输协议)发送电子邮件。你可以自动化发送电子邮件的任务,比如发送通知、报告或个性化消息。
示例:发送个性化电子邮件
假设你有一个收件人列表,并想向每个人发送个性化电子邮件。下面是如何使用 Python 自动化这个任务的示例:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
sender_email = 'your_email@example.com'
sender_password = 'your_email_password'
recipients = [
{'name': 'John Doe', 'email': 'john@example.com'},
{'name': 'Jane Smith', 'email': 'jane@example.com'},
{'name': 'Mike Johnson', 'email': 'mike@example.com'}
]
for recipient in recipients:
message = MIMEMultipart()
message['From'] = sender_email
message['To'] = recipient['email']
message['Subject'] = 'Personalized Email'
body = f"Dear {recipient['name']},\n\nThis is a personalized email just for you!"
message.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login(sender_email, sender_password)
server.send_message(message)
server.quit()
这段代码创建了一个包含收件人姓名和电子邮件地址的收件人列表。然后,它遍历收件人并使用 email
模块中的 MIMEMultipart
和 MIMEText
类构建了每个收件人的个性化电子邮件。电子邮件包含了一个个性化的问候语。最后,它建立与 SMTP 服务器的连接,使用发件人的凭据登录,发送电子邮件,然后关闭连接。
7. 使用 Selenium 自动化 Web 浏览器交互
Selenium 是一个强大的工具,用于自动化 Web 浏览器交互。它允许你模拟用户操作,比如点击按钮、填写表单和在页面之间导航。Selenium 的 Python 绑定提供了一种方便的方式来自动化基于 Web 的任务。
示例:自动化 Web 表单提交
假设你想自动填写并提交一个 Web 表单的过程。下面是如何使用 Selenium 实现这一目标的示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
# 创建一个 Chrome 驱动器的新实例
driver = webdriver.Chrome()
# 导航到 Web 表单页面
driver.get('https://example.com/form')
# 填写表单字段
name_field = driver.find_element(By.NAME, 'name')
name_field.send_keys('John Doe')
email_field = driver.find_element(By.NAME, 'email')
email_field.send_keys('john@example.com')
country_select = Select(driver.find_element(By.NAME, 'country'))
country_select.select_by_visible_text('United States')
# 提交表单
submit_button = driver
.find_element(By.XPATH, '//button[@type="submit"]')
submit_button.click()
# 关闭浏览器
driver.quit()
这段代码使用 Selenium 自动化填写和提交 Web 表单的过程。它创建一个 Chrome 驱动器的新实例,导航到表单页面,使用各种定位策略(如 By.NAME
、By.XPATH
)定位表单字段,并填写所需的值,最后点击提交按钮。最后,它关闭了浏览器。
8. 使用 Python 进行任务调度和自动化
Python 提供了几个用于调度和自动化任务的库和工具,如 schedule
库和 cron
实用程序。这些工具允许你在特定时间间隔或指定时间运行 Python 脚本。
示例:调度每日任务
假设你想在每天特定的时间运行一个 Python 脚本。下面是如何使用 schedule
库实现这一目标的示例:
import schedule
import time
def daily_task():
# 每日任务的代码放在这里
print("Running daily task...")
schedule.every().day.at("09:00").do(daily_task)
while True:
schedule.run_pending()
time.sleep(1)
这段代码定义了一个名为 daily_task()
的函数,其中包含你想要每天运行的任务代码。然后,它使用 schedule
库将任务调度为每天上午 9 点运行。while
循环不断检查待定的调度任务,并在其指定的时间运行它们。time.sleep(1)
语句介绍了每次检查之间的一秒延迟,以防止过多的 CPU 使用。
9. 使用 openpyxl 自动化 Excel 操作
Python 提供了 openpyxl
库,用于自动化 Microsoft Excel 操作,如读写数据、格式化单元格和执行计算。它允许你以编程方式与 Excel 文件交互。
示例:更新 Excel 电子表格数据
假设你有一个包含数据的 Excel 电子表格,并且想根据某些条件更新特定的单元格。下面是如何使用 openpyxl
自动化这个任务的示例:
from openpyxl import load_workbook
# 加载 Excel 工作簿
workbook = load_workbook('data.xlsx')
sheet = workbook.active
# 根据条件更新单元格值
for row in sheet.iter_rows(min_row=2, values_only=True):
if row[1] > 100:
sheet.cell(row=row[0], column=3).value = 'High'
else:
sheet.cell(row=row[0], column=3).value = 'Low'
# 保存更新后的工作簿
workbook.save('updated_data.xlsx')
这段代码使用 load_workbook()
方法从现有的 Excel 工作簿中加载工作簿。然后,它使用 iter_rows()
方法迭代从第二行开始的每一行,并根据条件更新第三列的单元格值。最后,它将更新后的工作簿保存到一个新文件中。
10. 使用 PyPDF2 自动化 PDF 操作
Python 提供了 PyPDF2
库,用于自动化 PDF 文件的操作,比如合并、拆分和提取文本。它允许你以编程方式操作 PDF 文档。
示例:合并 PDF 文件
假设你有多个 PDF 文件,想将它们合并成一个 PDF 文档。下面是如何使用 PyPDF2
实现这一目标的示例:
from PyPDF2 import PdfMerger
# 创建一个 PdfMerger 对象
merger = PdfMerger()
# 要合并的 PDF 文件列表
pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']
# 将每个 PDF 文件附加到合并器对象
for pdf_file in pdf_files:
merger.append(pdf_file)
# 将合并后的 PDF 写入到一个新文件中
merger.write("merged.pdf")
merger.close()
这段代码从 PyPDF2
库中创建了一个 PdfMerger
对象。然后,它指定了一个要合并的 PDF 文件列表。它遍历每个 PDF 文件,并使用 append()
方法将其附加到合并器对象中。最后,
它使用 write()
方法将合并后的 PDF 写入到一个新文件中。
这些 Python 库和工具提供了强大的功能,可以帮助你自动化各种任务,从文件操作和数据分析到 Web 浏览器交互和电子邮件发送。通过利用这些工具,你可以提高工作效率,减少重复性任务的时间和精力消耗。
总结
今天我们学习了10个Python自动化脚本,其中包括对excel、pdf等文件的操作,熟悉了如何使用python实现邮件自动化,如何自动化操作界面以及实现浏览器操作等,希望能对你的日常有所帮助。
欢迎关注博主带来更多python自动化脚本。