跳至主要内容

Python 自动化:完整指南

了解 Python 自动化,包括基本概念、关键库、数据处理、AI 增强用法与最佳实践。包含真实示例。
· 13分钟 阅读

使用 AI 探索

本文提供使用 Python 进行自动化的完整指南。我们将讲解关键概念、核心库、真实用例和最佳实践,帮助读者设计并构建高效的自动化解决方案。若您正处于 Python 学习之旅,欢迎查看我们的Python Programming Fundamentals 技能学习路径,以加速您的学习进度。 

什么是 Python 自动化? 

Python 是一种广受欢迎的计算机语言,理由充分。其语法简洁、易学、易懂,并为广泛的应用场景提供了丰富的库支持。 

用于文件系统的工具包括 os、shutil 和 pathlib。在数据处理方面,有 pandas 和 openpyxl。schedule、time 和 threading 可帮助您进行任务调度。

自动化繁琐的手工任务是 Python 的一个实用用例。为什么每个月都要手动制作报告并发送邮件?写个 Python 脚本替您完成吧。

Python 自动化基础

Python 是自动化的理想选择。其简单易用与广泛的库支持,使其即便对非开发者也很友好。

若需回顾 Python 基础,请查看以下 DataCamp 资源。

优势

它为自动化带来了多项关键优势。低门槛使用户仅用几行代码即可完成复杂任务。快速开发、简化调试与良好可扩展性,使其适用于高级自动化工作流,包括云集成、API 和微服务。

常见用例

一个常见的自动化任务是文件操作。脚本可根据命名规则、文件类型或时间戳来重命名、移动或整理文件。自动化也常用于下载、清洗、处理并保存网页数据以供后续使用。 

另一项常规应用是生成汇总报告并通过电子邮件分发。脚本可通过插入新数据、计算公式、应用格式或生成图表与可视化来更新电子表格。另一个常见用例是与 Web 应用交互,包括获取数据、提交表单和整合服务。

我们来看一个示例。下面的脚本使用 os 和 shutil 来自动整理 PDF 文件,展示了一个清晰、常见的文件管理场景。

import os
import shutil

source_folder = 'Downloads'
destination_folder = 'Documents/PDFs'

# Move all PDF files from Downloads to PDFs folder
for filename in os.listdir(source_folder):
    if filename.endswith('.pdf'):
        shutil.move(
            os.path.join(source_folder, filename),
            os.path.join(destination_folder, filename)
        )

Python 自动化核心概念

在进行 Python 自动化时,您需要了解以下基础:

解释型语言

Python 如何执行脚本?Python 是一种解释型语言。这意味着它在运行时逐行执行代码,而不是预先将整个程序编译为机器码。 

这一特性使得测试与开发更为快速,无需编译。代价是执行速度可能慢于编译型语言。 

脚本通常以 .py 为扩展名,并通过命令行以 python my_script.py 之类的命令执行。有关运行 Python 脚本的更多信息,请参阅我们的教程 How to Run Python Scripts。

可使用系统调度器(如 Windows 的 Task Scheduler 或 Linux、macOS 的 cron)来定时自动运行脚本。Python 库如 schedule 或 APScheduler 也支持在代码中进行调度控制。

输入-处理-输出模型

自动化脚本采用简单的输入-处理-输出模型。这一模式在编程工作流中十分常见。在输入阶段,脚本从多种来源收集数据,包括本地文件、数据库、Web API 和用户输入。 

在处理阶段,脚本会对数据进行转换、过滤与分析。在输出阶段,脚本通过多种方式给出结果:写入文件、发送电子邮件、将结果发布至 API,或保存到数据库。此流程使自动化脚本具有可预测性与可复用性,也便于将其集成到更大的系统中。

使用 Python 进行调度

Python 提供了 schedule 和 APScheduler 等库来实现任务调度自动化:

特性

schedule

APScheduler

复杂度

轻量级、进程内

高级,支持持久化

调度能力

固定时间间隔

Cron 表达式、间隔、精确定时

持久化

非持久化(仅内存)

通过数据库进行持久化存储

调度器类型

单一调度器

多种后端(AsyncIOScheduler、BackgroundScheduler)

对于简单的重复任务请选择 schedule,而 APScheduler 适用于高级、生产级的调度需求。

下面以 schedule 为例演示任务调度,展示脚本如何以固定间隔重复执行报表任务。

import schedule
import time

def job():
    print("Generating monthly report...")

# Schedule the job every month
schedule.every(30).days.at("08:00").do(job)

while True:
    schedule.run_pending()
    time.sleep(60)

错误处理

Python 通过 try/except 代码块内置支持错误处理。该机制使脚本能够在不崩溃的情况下预见并管理错误。脚本可捕获特定异常,以便记录问题供后续审查;同时提供错误信息并进行优雅恢复,保持运行。

自动化的核心 Python 库

核心 Python 库覆盖 GUI 自动化、Web 自动化与数据处理。

使用 pyautogui 进行 GUI 自动化

pyautogui 库可帮助自动化 GUI 任务。它通过模拟人类操作(如移动鼠标、点击、键入以及识别屏幕元素)来实现。它最适合界面稳定的轻量级、可视化自动化任务;不适合动态或复杂界面,因为它仅依赖像素、缺乏上下文感知。

PyAutoGUI 支持广泛的桌面自动化场景。它能在您的计算机上执行重复性任务,模拟在 Excel 等应用中的点击、按键与导航。开发者常用它来通过模拟用户行为验证桌面界面功能。对于游戏,它可通过宏自动化简单的游戏内操作。但需谨慎,许多游戏不允许自动化,使用者可能因此受罚。

Web 自动化:Selenium 与 Playwright

Selenium 是广泛使用的浏览器自动化工具,以其成熟度、庞大的社区支持以及对多浏览器与多语言的兼容性而闻名。它能很好地集成到 JUnit、TestNG、NUnit 等成熟测试框架之中,非常适合遗留系统与复杂的企业级环境。然而,Selenium 脚本通常需要显式等待与额外配置,尤其在动态、JavaScript 密集的应用中,维护成本较高。

相较之下,Playwright 是一款现代自动化库,提供自动等待、原生多标签页处理,以及在主流浏览器(包括 WebKit)上的统一 API。它在测试 React、Vue、Angular 等动态前端框架方面表现出色,非常适合在 CI/CD 流水线中进行快速、可靠的端到端测试。

有关 Python 测试的更多信息,请参阅此 Introduction to Testing in Python 课程。关于单元测试的细节,请参考 Unit Testing in Python 教程。 

使用 pandas 和 openpyxl 进行数据处理

Python 库 pandas 与 openpyxl 是进行电子表格自动化的强大工具。

pandas 擅长结构化数据处理。它可读写 CSV、Excel 或 SQL 数据;清洗与转换数据集;聚合统计;以及合并数据集。常见自动化用例包括创建自动化的 Excel 或 CSV 报告、清洗大型数据集,以及为仪表盘或归档准备数据。

openpyxl 专门处理 Excel 文件(.xlsx)。它可读写与格式化工作表、执行条件格式、插入公式并添加图表。典型用途包括自动生成报告与更新电子表格模板。

常见工作流是用 pandas 进行数据分析、用 openpyxl 进行呈现。对于大型数据集,pandas 通常更快。另请注意,openpyxl 仅支持 Excel 2007+(.xlsx),且不会计算公式——打开文件时由 Excel 本身处理。

下面的示例演示使用 pandas 自动化一个常规报表任务。它从 CSV 文件读取销售数据、去重、填充缺失值,然后将清洗后的数据直接导出到 Excel 表格中,便于分发或进一步分析。

import pandas as pd

# Load data from a CSV file
df = pd.read_csv('monthly_sales.csv')

# Data cleaning: remove duplicates and handle missing values
df_cleaned = df.drop_duplicates().fillna(0)

# Save the cleaned dataset as an Excel report
df_cleaned.to_excel('cleaned_sales_report.xlsx', index=False)

此工作流可轻松进行调度(例如使用 cron)并进一步扩展,例如集成电子邮件自动化以自动发送月度报告。

Python 自动化的实践应用

Python 广泛用于自动化真实世界的任务,从网页抓取到电子邮件自动化等。

网页抓取

网页抓取是一个常见应用。若可获得官方且结构化的访问方式,API 往往是最佳选择。若不可用,可使用 Beautiful Soup 或 Scrapy 等库直接从 HTML 提取数据。

Beautiful Soup 适合从 HTML 简单且稳定的网站抓取数据。它相对容易学习与使用,但需要对页面结构有较详细的了解;如果网站布局变更,抓取代码也容易失效。

Scrapy 适用于更复杂的用例。其对异步执行的支持使其在抓取含多页面的大型网站时足够快速高效。输出可导出为 JSON、CSV 或写入数据库。 

以下是一个简单示例,展示如何使用 Beautiful Soup 与 requests 从简单网页中提取结构化内容:

import requests
from bs4 import BeautifulSoup

# Fetch the webpage
response = requests.get('https://example.com')
soup = BeautifulSoup(response.text, 'html.parser')

# Extract all headlines
headlines = soup.find_all('h2')

for headline in headlines:
    print(headline.text.strip())

如需了解更多有关 Python 与网页抓取的信息,请查看以下资源。

电子邮件自动化

Python 的内置模块 smtplib 允许脚本通过 SMTP 以编程方式发送邮件。它常用于更大工作流中的通信自动化。

典型用例包括发送定时报告、从自动化作业中发送错误或系统告警、通知管理员或用户事件/更新,以及附加输出文件。

下面是一个带附件发送电子邮件的示例脚本。

import smtplib
from email.message import EmailMessage

# Connect to email provider's SMTP server
# e.g., gmail uses smtp.gmail.com on port 587
server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls()
server.login("[email protected]", "your_app_password")

# Compose email
msg = EmailMessage()
msg["Subject"] = "Automation Alert"
msg["From"] = "[email protected]"
msg["To"] = "[email protected]"
msg.set_content("This is an automated message.")
# Attach files
with open("report.pdf", "rb") as f:
    msg.add_attachment(f.read(), maintype="application", subtype="pdf", filename="report.pdf")

# Send the email
server.send_message(msg)
server.quit()

高级自动化架构

Python 提供强大的工具来管理自动化任务的调度与协调。诸如 APScheduler 的库和 Apache Airflow 之类的平台,能提供灵活、稳健且可扩展的解决方案。

APScheduler

Advanced Python Scheduler(APScheduler)是一个面向生产的库,提供高级调度选项,非常适合自动化周期性工作流。

APScheduler 允许在特定日期时间、固定间隔或按 cron 风格表达式(例如每周一上午 8 点)运行任务。

它支持通过数据库进行持久化的作业存储,使数据可在重启后保留。不同的调度器类型适配不同用例:BackgroundScheduler 适用于非阻塞任务,AsyncIOScheduler 适用于 asyncio 应用,BlockingScheduler 则适用于命令行脚本。作业的执行与错误可记录日志,便于后续调试或监控。

常见用例包括生成报告、发送定时邮件、运行健康检查、执行 ETL 作业以及进行数据库维护。

Apache Airflow

Apache Airflow 是一个开源企业平台,用于自动化、调度、管理与监控工作流。它是一个稳健、透明、可重复的系统,组织常用其来编排 ETL、机器学习与数据工程,以及报告生成。 

使用 Apache Airflow 时,您以 Python 编写工作流以定义任务及其运行顺序,并设定工作流启动的调度。Airflow 会在恰当时间执行各任务、监控工作流,并在出现问题时发送告警。其 Web 仪表板便于监控工作流与查看日志。

Python 自动化的新兴趋势

Python 在最新的自动化领域中扮演核心角色。诸如 AI 驱动决策与无服务器云计算等趋势,拓展了自动化的能力边界。

机器学习(ML)使自动化系统能够做出智能、数据驱动的决策。与传统的基于规则逻辑相比,这种集成带来更高的灵活性与适应性。

ML 会分析历史数据以预测事件,并据此触发自动化能力。例如,系统可以预测设备故障并在问题发生前安排维护。ML 也能给出应对建议。例如,欺诈检测系统可基于数据中识别出的行为特征来标记可疑信用卡交易,而非仅靠阈值。LLM 可以根据数据生成报告草稿,从而减少手动工作并加速内容创作。

如需进一步了解 AI 与自动化,请参考以下内容。

云原生自动化

在无服务器计算模型中,云服务商负责管理基础设施,使开发者能够专注于业务逻辑与自动化工作流。 

“无服务器”一词指的是开发者无需管理或配置服务器;当然并非真的没有服务器。诸如 AWS Lambda、Google Cloud Functions 与 Azure Functions 等服务可以让 Python 脚本基于事件触发运行。 

这种方式带来多重益处。它免除了用户对虚拟机或容器的管理责任。无服务器函数会随需求自动扩展,例如在在线零售旺季部署更多资源。该模型也具有成本效益,用户只需为实际使用的计算时间付费。

可靠自动化的最佳实践

以下是使用 Python 进行流程自动化时的一些要点建议: 

错误处理技巧

有效的错误处理可使自动化脚本实现优雅恢复。遵循以下最佳实践来管理异常。

  • 使用特定的 try/except 块。仅捕获预期的异常,而非笼统捕获所有错误。例如,针对除零错误编写专门的处理代码块,而不是使用通用的错误捕获。
  • 使用 finally。finally 块可确保清理操作,例如重置变量、释放资源。
  • 记录错误。错误应记录用于未来监控,而非仅打印输出。
  • 设置默认行为。对于非关键性故障,提供合理的默认或回退方案。
  • 快速且清晰地失败。若故障不可恢复,应抛出异常或尽早退出,并给出清晰的消息。

配置管理

使用环境变量是最佳实践,因为它将配置与代码分离。为提升安全性,请将密码、数据库凭据与 API 密钥等敏感数据置于源代码之外,尤其在使用版本控制时。 

环境变量允许开发、预发与生产等不同环境使用相同代码库但不同配置。这种做法简化了云环境的部署,并使维护更轻松,因为配置变更无需修改代码本身。

性能优化

优化自动化脚本可确保程序运行更快、资源占用更少并具备更好的扩展性。这对大型数据集、时间敏感流程或频繁运行的任务尤为重要。

一些关键的性能优化策略:

  • 尽量减少重复工作。避免重复计算或多次查询相同数据。必要时使用记忆化或存储中间结果。
  • 使用高效库。选择轻量、为特定目的构建的库以降低开销。例如,使用 pandas 代替手写循环。
  • 使用高效的数据结构。同理,选择开销更低的数据结构。例如,用 set 或 dict 替代 list 以加速查找。
  • 缓存结果。对代价高或频繁的操作使用内存或外部缓存。
  • 批处理。将文件写入、数据库插入等操作分批执行以减少开销。
  • 并行/并发执行。对可并行的任务(如文件处理或数据转换)使用线程或多进程。
  • 剖析与基准测试代码。使用 cProfile、line_profiler 或 timeit 等工具识别瓶颈并定位需优化的代码段。

结语

Python 是一门功能强大且用途广泛的自动化语言。无论是自动化简单的文件重命名任务,还是借助 Airflow 等工具构建复杂工作流,Python 都能提供实现可靠自动化所需的工具。通过本指南中的建议,读者可以将重复性任务实现自动化。若您仍在 Python 学习之旅上,欢迎查看我们的Python Programming Fundamentals 技能学习路径,以加速您的学习。

Python 自动化常见问答

为何使用 Python 进行自动化?

Python 的简洁语法、丰富的库生态以及跨平台兼容性,使其对开发者与非开发者都极具吸引力。

我可以用 Python 自动化 Excel 任务吗?

可以。使用 pandas 进行数据处理,使用 `openpyxl` 以编程方式创建、编辑与美化 Excel 文件。

网页抓取合法吗?

在许多情况下,网页抓取是合法的,尤其当数据是公开时,但务必查看目标网站的服务条款。对于结构化数据,如有可用 API,请优先考虑使用。

如何安全地存储配置设置?

使用环境变量管理诸如 API 密钥与数据库凭据等配置,并将其与源代码分离。

Mark Pedigo

作者

Mark Pedigo

Mark Pedigo(博士)是一位在医疗数据科学、编程与教育领域具有深厚专长的资深数据科学家。Mark 拥有数学博士学位、计算机科学学士学位以及人工智能专业证书,兼具扎实的技术底蕴与务实的解决问题能力。他的职业经历涵盖欺诈检测、婴儿死亡率预测与财务预测,并参与了 NASA 成本估算软件的研发。作为教育工作者,他曾在 DataCamp 和圣路易斯华盛顿大学任教,并指导初级程序员。在闲暇时间,Mark 与妻子 Mandy 和爱犬 Harley 一起享受明尼苏达的户外时光,并演奏爵士钢琴。

主题