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…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
