Python 自动化脚本系列:第1集
昨天写了一篇介绍如何使用Python实现自动化任务的,文章末尾介绍了一个简单的自动化脚本,因此今天编号从2开始。顺便附上昨天的文章链接:
Python 自动化脚本系列:介绍
欢迎关注博主,持续输出更多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自动化脚本。
相关文章:
Python 自动化脚本系列:第1集
昨天写了一篇介绍如何使用Python实现自动化任务的,文章末尾介绍了一个简单的自动化脚本,因此今天编号从2开始。顺便附上昨天的文章链接: Python 自动化脚本系列:介绍 欢迎关注博主,持续输出更多Python相关内容&#…...

基于PHP开发的图片高清无损在线压缩源码系统 带完整源代码以及搭建教程
系统概述 高清无损在线压缩源码系统基于PHP语言开发,结合GD库和ImageMagick等图像处理工具,实现了对JPEG、PNG、GIF等多种图片格式的高清无损压缩。系统采用B/S架构,用户只需通过浏览器访问系统界面,即可实现图片的上传、压缩、预…...

Linux提权--SUDO(CVE-2021-3156)Polkit(CVE-2021-4034)
免责声明:本文仅做技术学习与交流... 目录 SUDO(CVE-2021-3156) 影响版本 -判断: -利用: Polkit(CVE-2021-4034) -判断: -利用: 添加用户 SUDO(CVE-2021-3156) another: SUDO权限配置不当. 影响版本 由系统的内核和发…...

nodejs里面的 http 模块介绍和使用
Node.js的HTTP模块是一个核心模块,它提供了很多功能来创建HTTP服务器和发送HTTP请求。 http.Server是一个基于事件的http服务器,内部是由c实现的,接口是由JavaScript封装。 http.request是一个http客户端工具。 用户向服务器发送数据。 创…...

MVC框架简易实现【精细】
目录 mvc 的架构 MVC 框架 传统web开发的弊端 1.创建一个maven项目 2.添加maven依赖 3.创建TomCatService类 3.1 创建TomcatService类 3.2 TomcatService类讲解 3.3 安装项目到本地仓库,给其他项目使用 4.测试启动Tomcat 4.1 创建一个新的maven项目 4.2 引用…...

Java入门基础学习笔记18——赋值运算符
赋值运算符: 就是“”,就是给变量赋值的,从右边往左边看。 int a 10; // 把数据赋值给左边的变量a存储。 扩展赋值运算符: 注意:扩展的赋值运算符隐含了强制类型转换。 package cn.ensource.operator;public class…...
csv 可视化 python代码
excel查看csv后,csv就被锁定了,不能修改,用pyqt写一个csv查看工具,拖拽查看,非常方便 目录 第2版,提升加载速度 选中单元格统计个数,求和,平均值...
HashMap 和 Hashtable区别的底层原理
一、容器键值对: 1.HashMap 的 key 和 value 都允许为 null , HashMap 在 key 为 null 的时候,值必须为null。 2.Hashtable 的 key 和 value 都不允许为 null 。 Hashtable 遇到key或value为 null时 ,将抛出 NullPointerException…...
代码随想录35期Day32-Java
Day32题目 LeetCode122.买股票的最佳时机 核心思想:很简单,只要第二天比第一天贵,就第一天买入,第二天卖出 class Solution {public int maxProfit(int[] prices) {// 只要后一天比这一天价钱高就买,然后第二天卖出…...

ROS 2边学边练(45)-- 构建一个能动的机器人模型
前言 在上篇中我们搭建了一个机器人模型(其由各个关节(joint)和连杆(link)组成),此篇我们会通过设置关节类型来实现机器人的活动。 在ROS中,关节一般有无限旋转(continuous),有限旋转…...
【第66例】IPD体系进阶:华为IPD发展历程
目录 简介 样例 作者简介 简介 想要引入 IPD,首先就要思考一些问题: 跟我的企业适配吗? 流程会不会太重了? 一定要引入吗,有没有其他方式? 从目前大的环境来说。 中国制造业正在由“中国制造”向“中国创造”转变。 这也是企业价值转移的趋势。 宏碁集团创始人施振…...

websevere服务器从零搭建到上线(四)|muduo网络库的基本原理和使用
文章目录 muduo源码编译安装muduo框架讲解muduo库编写服务器代码示例代码解析用户连接的创建和断开回调函数用户读写事件回调 使用vscode编译程序配置c_cpp_properties.json配置tasks.json配置launch.json编译 总结 muduo源码编译安装 muduo依赖Boost库,所以我们应…...
C语言笔记10
1.用指针打印一维数组 //1.用指针打印一维数组 #include <stdio.h> int main() {//int arr[] { 1,2,3,4,5 };int arr[5] { 0 };int* p &arr[0];int sz sizeof(arr) / sizeof(arr[0]);for (int i 0; i < sz; i){scanf("%d", &arr[i]);}//int* …...
BMS-HiL主要功能
BMS HIL 系统中 PC 机中安装实验管理软件用于测试过程管理和测试序列编辑,通过以太网与 PXI 机箱中的处理器进行连接,处理器中运行实时系统(Real Time)并安装 Veristand 终端引擎,通过与 PC 中的数据传输,对…...

idea无法识别加载pom.xml文件
有时idea无法识别加载pom.xml文件,直接打开pom.xml文件,然后添加到maven就行...
C语言笔记12
1.使用qsort函数进行排序 #include <stdio.h> #include <stdlib.h> #include <string.h>//void qsort(void* base, //指向待排序数组的第一个元素的指针 // size_t num, //base指向数组中的元素个数 // size_t size,//base指向的数组中一…...
说一下 hibernate 的缓存机制?
Hibernate 的缓存机制是为了提高应用程序的性能,通过减少对数据库物理数据源的访问频次而设计的。Hibernate 的缓存主要可以分为两个级别:一级缓存(也称为 Session 级别的缓存)和二级缓存(也称为 SessionFactory 级别的…...

Mac安装jadx
1、使用命令brew安装 : brew install jadx 输入完命令,等待安装完毕 备注(关于Homebrew ): Homebrew 是 MacOS 下的包管理工具,类似 apt-get/apt 之于 Linux,yum 之于 CentOS。如果一款软件发布时支持了 homebrew 安…...

风扇开启执行逻辑
执行流程 public static void businessExecutionWork(){//以下为业务逻辑部分System.out.println("1、根据电池包控制风扇服务执行 开始!");//1、获取电池包电压、电流、环境温度//获取电池包电压、电流、环境温度ObtainBatteryDataService obtainBatteryDataServic…...
调用函数实现数组的输入排序插入与输出
输入一串数字,输出排序插入后输出最后的数字序列; 把主要步骤交给主函数,通过调用函数来实现整体的功能: 写出主函数(这里使用冒泡排序): int main(){int n;int a[10];cin>>n;inputa(a…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...