从零开始构建:Python自定义脚本自动化你的日常任务
从零开始构建:Python自定义脚本自动化你的日常任务
Python 作为一种简洁且功能强大的编程语言,被广泛应用于各种自动化任务中。通过编写 Python 脚本,你可以轻松地将日常重复性工作自动化,例如文件操作、数据处理、网络爬虫、系统管理等。这篇博客将从零开始,带你构建自定义 Python 脚本,实现对一些常见任务的自动化。
一、为什么选择 Python 自动化?
- 简洁性:Python 语法非常直观、简洁,对于编写小型自动化脚本来说非常合适。
- 丰富的标准库和第三方库:Python 提供了大量内置库和第三方库,涵盖了从操作系统到网络的几乎所有自动化任务。
- 跨平台:Python 脚本可以在 Windows、macOS 和 Linux 等多种操作系统上运行,无需修改代码。
- 社区支持:Python 拥有庞大的开发者社区,遇到问题时,几乎可以通过在线社区找到解决方案。
接下来,我们将一步步展示如何编写自定义的 Python 脚本来实现日常任务的自动化。我们将涉及文件管理、自动化邮件发送和网络数据获取等示例。
二、环境准备
为了开始编写 Python 脚本,你需要具备以下条件:
- 安装 Python:大多数操作系统默认都安装了 Python,你可以通过命令行输入
python --version
检查。如果没有安装,可以到Python 官网下载并安装。 - 文本编辑器或 IDE:推荐使用 VSCode、PyCharm 等工具来编写和运行 Python 脚本。
三、示例一:自动化文件管理任务
首先,我们实现一个自动化文件管理的脚本。假设我们有一个文件夹,里面包含不同类型的文件(如图片、文档等),我们希望能够自动化分类这些文件,并将它们移动到指定的文件夹中。
1. 编写文件分类脚本
import os
import shutil# 定义文件类型与目标文件夹的映射关系
file_types = {'images': ['.jpg', '.png', '.gif'],'documents': ['.pdf', '.docx', '.txt'],'spreadsheets': ['.xls', '.xlsx'],'videos': ['.mp4', '.avi']
}# 源文件夹和目标文件夹路径
source_folder = '/path/to/your/source_folder'
destination_folder = '/path/to/your/destination_folder'# 创建目标文件夹(如果不存在)
for folder in file_types:folder_path = os.path.join(destination_folder, folder)if not os.path.exists(folder_path):os.makedirs(folder_path)# 遍历源文件夹中的所有文件
for filename in os.listdir(source_folder):file_ext = os.path.splitext(filename)[1].lower() # 获取文件后缀file_path = os.path.join(source_folder, filename)# 根据文件后缀将文件移动到对应文件夹for folder, extensions in file_types.items():if file_ext in extensions:shutil.move(file_path, os.path.join(destination_folder, folder))print(f'Moved {filename} to {folder} folder')break
2. 代码说明:
- 使用
os.listdir()
遍历源文件夹中的所有文件。 - 通过
os.path.splitext()
获取文件的扩展名,并根据预定义的文件类型映射将其移动到相应的文件夹。 - 如果目标文件夹不存在,使用
os.makedirs()
创建。
3. 运行脚本
将代码保存为 file_organizer.py
,并在终端中运行:
python file_organizer.py
脚本会自动遍历源文件夹中的所有文件,并根据文件类型将它们移动到不同的文件夹中。这对于整理桌面、下载文件夹等非常有用。
四、示例二:自动发送邮件
有时候,我们需要自动化发送通知邮件,例如定时提醒、发送报告等。Python 提供了 smtplib
模块,配合 email
模块可以很方便地实现邮件自动发送。
1. 编写邮件发送脚本
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart# 邮件发送者和接收者
sender_email = 'your_email@gmail.com'
receiver_email = 'receiver_email@gmail.com'
password = 'your_password'# 创建邮件对象
message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = '自动化任务通知'# 邮件正文
body = '这是通过Python脚本发送的自动化邮件通知。'
message.attach(MIMEText(body, 'plain'))# 设置SMTP服务器并发送邮件
try:server = smtplib.SMTP('smtp.gmail.com', 587)server.starttls() # 启用安全传输server.login(sender_email, password)server.sendmail(sender_email, receiver_email, message.as_string())server.quit()print('邮件发送成功!')
except Exception as e:print(f'邮件发送失败: {e}')
2. 代码说明:
- 使用
smtplib.SMTP()
连接到 SMTP 邮件服务器。 - 使用
MIMEMultipart()
创建邮件,并通过MIMEText()
将邮件正文附加到消息中。 - 调用
server.sendmail()
发送邮件。
3. 运行脚本
将代码保存为 send_email.py
,运行前将 sender_email
、receiver_email
和 password
替换为真实信息。然后运行:
python send_email.py
这段代码将会通过 Gmail 发送一封自动邮件。为了确保安全性,可以在脚本中使用应用专用密码或配置更安全的邮件发送方式。
五、示例三:自动化网页数据爬取
网络爬虫是自动化脚本中的常见任务,Python 提供了 requests
和 BeautifulSoup
库,用于抓取网页数据并解析 HTML 内容。假设我们要抓取某个网站上的新闻标题,可以编写如下脚本。
1. 编写网页爬取脚本
import requests
from bs4 import BeautifulSoup# 目标网址
url = 'https://news.ycombinator.com/'# 发送HTTP请求并获取网页内容
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')# 查找并打印所有新闻标题
for item in soup.find_all('a', class_='storylink'):print(item.text)
2. 代码说明:
- 使用
requests.get()
发送 HTTP 请求并获取网页内容。 - 使用
BeautifulSoup
解析 HTML,并通过find_all()
查找指定的 HTML 标签。 - 在这个示例中,我们查找所有带有
storylink
类的<a>
标签,并打印新闻标题。
3. 运行脚本
将代码保存为 news_scraper.py
,并运行:
python news_scraper.py
脚本会抓取指定网站的新闻标题并输出到终端。通过类似的方法,你可以扩展脚本来抓取任何你感兴趣的数据。
六、如何将这些脚本整合成自动化工作流?
为了实现更高效的自动化,可以将不同的脚本整合到一个统一的流程中。举个例子,文件整理、数据抓取和邮件通知可以组合成一个定时执行的工作流。
1. 使用 cron
或 Task Scheduler
定时执行
在 Linux/macOS 上,可以使用 cron
定时执行任务。例如,每天凌晨执行脚本:
crontab -e
添加如下定时任务,每天凌晨2点执行文件管理脚本:
0 2 * * * /usr/bin/python3 /path/to/file_organizer.py
在 Windows 上,可以使用 Task Scheduler 定时执行 Python 脚本。
2. 整合多个脚本
你还可以将不同的脚本放入一个主脚本中统一调度:
import subprocess# 依次执行文件整理、抓取新闻、发送邮件
subprocess.run(['python3', 'file_organizer.py'])
subprocess.run(['python3', 'news_scraper.py'])
subprocess.run(['python3', 'send_email.py'])
七、总结
通过 Python 自定义脚本,你可以轻松实现日常任务的自动化。本文展示了三个典型的自动化任务:文件管理、邮件发送和网页爬取。你可以根据自己的需求,编写更多脚本并将它们整合到自动化工作流中,提升工作效率。
八、更多日常生活中有用的 Python 自动化脚本
为了帮助大家进一步理解 Python 在日常任务中的应用,下面再展示几个更贴近生活的自动化脚本例子。这些脚本不仅可以提高工作效率,还能帮助你在日常生活中减少重复性劳动。
示例四:自动备份文件
备份是保障数据安全的关键步骤之一,但手动备份繁琐而容易被忽略。通过编写一个自动化备份脚本,你可以定期将重要文件复制到备份目录或云存储中。
1. 编写自动备份脚本
import os
import shutil
import time# 源文件夹和备份文件夹路径
source_folder = '/path/to/important_files'
backup_folder = '/path/to/backup'# 获取当前时间,创建以日期命名的备份文件夹
current_time = time.strftime('%Y%m%d%H%M%S')
backup_path = os.path.join(backup_folder, current_time)# 创建备份文件夹
os.makedirs(backup_path)# 复制所有文件到备份文件夹
for filename in os.listdir(source_folder):file_path = os.path.join(source_folder, filename)if os.path.isfile(file_path):shutil.copy(file_path, backup_path)print(f'备份完成!所有文件已复制到 {backup_path}')
2. 代码说明:
- 使用
time.strftime()
获取当前时间,将备份文件夹命名为当前时间的格式。 - 通过
os.listdir()
遍历源文件夹中的所有文件,并使用shutil.copy()
将其复制到新的备份目录中。 - 你可以将这个脚本定期运行,确保重要文件不会丢失。
示例五:自动化 PDF 合并
在处理文档时,可能需要将多个 PDF 文件合并为一个文件,尤其是在处理多页报告、发票或合同时。利用 Python 中的 PyPDF2
库,可以很方便地实现 PDF 文件的合并。
1. 安装依赖
首先,你需要安装 PyPDF2
库:
pip install PyPDF2
2. 编写 PDF 合并脚本
import PyPDF2
import os# 定义待合并的 PDF 文件目录
pdf_folder = '/path/to/pdf_files'
output_file = '/path/to/merged_output.pdf'# 初始化 PdfFileMerger 对象
pdf_merger = PyPDF2.PdfMerger()# 遍历目录中的所有 PDF 文件
for filename in os.listdir(pdf_folder):if filename.endswith('.pdf'):file_path = os.path.join(pdf_folder, filename)pdf_merger.append(file_path)# 将合并的 PDF 文件输出到指定位置
with open(output_file, 'wb') as f_out:pdf_merger.write(f_out)print(f'PDF 文件已合并并保存为 {output_file}')
3. 代码说明:
PyPDF2.PdfMerger()
用于合并多个 PDF 文件。- 脚本会自动遍历指定目录中的所有 PDF 文件,并将它们按顺序合并为一个文件。
示例六:自动发送微信消息
在日常生活中,及时发送通知或提醒(如天气提醒、事件提醒等)非常重要。通过结合 Python 和微信的 itchat
库,你可以编写一个自动发送微信消息的脚本。
1. 安装依赖
首先安装 itchat
库:
pip install itchat
2. 编写自动发送微信消息脚本
import itchat# 登录微信
itchat.auto_login(hotReload=True)# 查找好友(例如你自己)
friend = itchat.search_friends(name='Your Name')[0]# 发送消息
friend.send('这是通过Python自动发送的微信消息!')# 登出
itchat.logout()
3. 代码说明:
itchat.auto_login()
用于登录微信,你需要扫描二维码以验证登录。- 使用
itchat.search_friends()
查找好友,并通过friend.send()
发送消息。 - 此脚本可以结合其他信息来源(如天气预报、定时提醒)自动向自己或好友发送通知。
示例七:自动化图片批量处理
假设你有一个文件夹,里面包含了大量图片,你想要对这些图片进行批量处理,比如调整大小、转换格式等。这时可以利用 Python 中的 Pillow
库来实现自动化处理。
1. 安装依赖
首先安装 Pillow
库:
pip install Pillow
2. 编写图片批量处理脚本
from PIL import Image
import os# 定义图片文件夹和输出文件夹路径
image_folder = '/path/to/images'
output_folder = '/path/to/processed_images'# 定义处理参数
new_size = (800, 600) # 新的图片尺寸# 遍历所有图片文件
for filename in os.listdir(image_folder):if filename.endswith('.jpg') or filename.endswith('.png'):img_path = os.path.join(image_folder, filename)img = Image.open(img_path)# 调整图片大小img = img.resize(new_size)# 保存处理后的图片output_path = os.path.join(output_folder, filename)img.save(output_path)print(f'所有图片已处理并保存在 {output_folder}')
3. 代码说明:
Image.open()
打开图片文件,img.resize()
用于调整图片大小。- 处理后的图片会保存到指定的输出文件夹中。
示例八:自动下载YouTube视频
对于需要下载在线视频资源的人来说,可以利用 pytube
库自动下载 YouTube 视频。
1. 安装依赖
首先安装 pytube
库:
pip install pytube
2. 编写 YouTube 视频下载脚本
from pytube import YouTube# 视频URL
video_url = 'https://www.youtube.com/watch?v=your_video_id'# 创建 YouTube 对象
yt = YouTube(video_url)# 选择最高质量的视频流
stream = yt.streams.get_highest_resolution()# 下载视频
stream.download(output_path='/path/to/download')print(f'视频已下载到指定目录')
3. 代码说明:
YouTube(video_url)
创建 YouTube 视频对象,get_highest_resolution()
获取最高分辨率的视频流。- 视频会下载到指定的文件夹中,供离线观看。
示例九:自动化系统清理
为了保持系统干净有序,定期清理缓存、临时文件等是很有必要的。你可以编写一个简单的 Python 脚本来自动删除指定目录中的临时文件。
1. 编写系统清理脚本
import os
import shutil# 定义要清理的目录
temp_folders = ['/path/to/temp1', '/path/to/temp2']# 遍历并删除临时文件夹中的文件
for folder in temp_folders:for filename in os.listdir(folder):file_path = os.path.join(folder, filename)try:if os.path.isfile(file_path) or os.path.islink(file_path):os.unlink(file_path) # 删除文件或符号链接elif os.path.isdir(file_path):shutil.rmtree(file_path) # 删除文件夹print(f'已删除 {file_path}')except Exception as e:print(f'删除 {file_path} 时出错: {e}')
2. 代码说明:
- 通过
os.unlink()
删除文件,通过shutil.rmtree()
删除文件夹及其所有内容。 - 这个脚本适用于定期清理系统临时文件、浏览器缓存等。
九、结论
通过 Python 脚本自动化,你可以显著减少手动重复的工作量,提高日常生活中的工作效率。这篇文章中展示了多个有实际应用价值的自动化脚本,涵盖了文件管理、邮件发送、PDF 合并、图片处理等多个方面。
你可以根据自身需求扩展这些脚本,或者将它们结合成一个完整的自动化解决方案。Python 的强大和灵活性,使得它成为了实现日常任务自动化的理想工具。开始编写属于你自己的自动化脚本吧!
相关文章:

从零开始构建:Python自定义脚本自动化你的日常任务
从零开始构建:Python自定义脚本自动化你的日常任务 Python 作为一种简洁且功能强大的编程语言,被广泛应用于各种自动化任务中。通过编写 Python 脚本,你可以轻松地将日常重复性工作自动化,例如文件操作、数据处理、网络爬虫、系统…...

【python实操】python小程序之对象的属性操作
引言 python小程序之对象的属性操作 文章目录 引言一、对象的属性操作1.1 题目1.2 代码1.3 代码解释 二、思考2.1 添加属性2.2 获取属性 一、对象的属性操作 1.1 题目 给对象添加属性 1.2 代码 class Cat:# 在缩进中书写⽅法def eat(self):# self 会⾃动出现,暂不管print(f…...

HCIP——网络类型及数据链路层协议
目录 网络类型的分类 数据链路层协议 MA网络 以太网协议 P2P网络 HDLC---高级数据链路控制协议 HDLC网络搭建 PPP---点到点协议 PPP协议的优点 PPP数据帧封装结构编辑 PPP会话的搭建 路建立阶段---LCP建立 认证阶段 PAP CHAP 网络层协议协商阶段---NCP协商 网…...

数据结构——栈与队列的实现(全码)
一 栈的概念 栈是一种特殊的线性表,栈内数据遵循先进后出(LIFO)的原则,对于栈,只能在同一侧进行入栈和出栈操作。 入栈操作和出栈操作是在栈的同一侧进行的,如图示: 对于栈这种数据类型,我们可以采用链表或…...

MacOS编译和安装Poco库的方法
1.从官网git下载最新的poco源代码 在/usr/local路径下创建Poco文件夹,克隆Poco源代码 sudo git clone -b poco-1.13.3-release https://github.com/pocoproject/poco.git2.等了一会后,报错啦!!! error: RPC failed…...

医院管理新境界:Spring Boot技术突破
6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…...

Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控
Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控 文章目录 Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控一 获取 prometheus 配置二 配置的内容三 prometheus 的配置1)集群级别的指标2&a…...

渗透测试入门学习——使用python脚本自动跟踪csrf_token实现对网站登录界面的暴力破解
目录 写在前面 使用方法 相关代码 写在前面 最近在学习使用Burp Suite时发现其intruder模块无法实现多种模式的混合使用,就如想要暴力破解账号和口令两个区域并同时跟踪网页的csrf_token时BP似乎不能很方便的实现这一功能,于是自己在练习时就想到了用…...

stc8最小系统使用usb下载程序,关于断电的避坑
首先,按stc官方的原理图做好最小系统。 下面,来看一下stc手册中的操作步骤 USB-ISP 下载程序步骤: 1、按下板子上的 P3.2/INT0 按键,就是 P3.2 接地 2、给目标芯片重新上电,不管之前是否已通电。 电子开关是按下停电后…...

API 数据接口:使用操作流程与安全指南
在当今数字化高速发展的时代,API 数据接口如同构建数字世界的关键纽带,将不同的软件系统和服务紧密连接在一起。无论是企业开发者致力于提升业务效率,还是个人用户追求更便捷的数字体验,深入了解 API 数据接口的使用操作流程以及全…...

elasticsearch 8.2 版本如何设置config/elasticsearch.yml
在Elasticsearch 8.2版本中,`config/elasticsearch.yml`文件是用于配置Elasticsearch的主要配置文件。你可以通过编辑这个文件来设置各种配置选项。以下是一些常见的配置选项及其设置方法: ### 1. 基本配置 #### 集群名称 ```yaml cluster.name: my-cluster ``` #### 节点…...

华为 HCIP-Datacom H12-821 题库 (33)
🐣博客最下方微信公众号回复题库,领取题库和教学资源 🐤诚挚欢迎IT交流有兴趣的公众号回复交流群 🦘公众号会持续更新网络小知识😼 1.VLAN Pool 只要通过一个 SSID 就能够同时支持多个业务 VLAN,从而缩小广播域&#…...

【网络篇】计算机网络——运输层详述(笔记)
目录 一、运输层 1. 概述 2. 运输层和网络层的关系 3. 运输层协议概述 二、多路复用和多路分解 1. 综述 2. 无连接的多路复用与多路分解(UDP) 3. 面向连接的多路复用与多路分解(TCP) 4. Web 服务器与TCP 三、UDP&#x…...

用java编写飞机大战
游戏界面使用JFrame和JPanel构建。背景图通过BG类绘制。英雄机和敌机在界面上显示并移动。子弹从英雄机发射并在屏幕上移动。游戏有四种状态:READY、RUNNING、PAUSE、GAMEOVER。状态通过鼠标点击进行切换:点击开始游戏(从READY变为RUNNING&am…...

java Map中get方法爆错NullPointerException
代码如下: public class Hello {public static void main(String[] args) {Map<Integer,Integer> map new HashMap<>();map.put(2,1);int i map.get(1); System.out.println(i);} }运行出错,看代码很明显是get到一个不存在map的值&#x…...

ElasticSearch备考 -- Multi field
一、题目 Create the index hamlet_2 with one primary shard and no replicas Copy the mapping of hamlet_1 into hamlet_2, but also define a multi-field for speaker. The name of such multi-field is tokens and its data type is the (default) analysed string Reind…...

刷题 图论
面试经典 150 题 - 图 200. 岛屿数量 dfs 标记 visited class Solution { public:// dfs 染色const int direction[4][2] {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};void dfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x…...

基于JAVA的鲜花商城管理系统(源码+定制+讲解)鲜花商城管理系统、鲜花商城管理平台、鲜花商城信息管理、鲜花商城系统开发与应用、鲜花在线商城管理系统
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

深圳大学-Java程序设计-选实验1 基础知识练习
实验目的与要求: 实验目的:掌握Java程序设计开发环境的搭建,编写简单Java Project,掌握编译、运行等基本步骤和命令。 实验要求: (1).下载、安装"Java SE Development Kit 20.0.2"最新的版本,需…...

第 33 章 Ajax
第 33 章 Ajax 1.XMLHttpRequest 2.GET 与 POST 3.封装 Ajax 2005 年 Jesse James Garrett 发表了一篇文章,标题为:“Ajax:A new Approach to Web Applications”。他在这篇文章里介绍了一种技术,用他的话说,就叫&…...

LeetCode 209 Minimum Size Subarray Sum 题目解析和python代码
题目: Given an array of positive integers nums and a positive integer target, return the minimal length of a subarray whose sum is greater than or equal to target. If there is no such subarray, return 0 instead. Example 1: Input: target 7, nu…...

C# 入坑JAVA 潜规则 注解 列表 listMch,该列表存储了一个映射(Map)的集合 等 入门系列3
java 项目结构 文件说明 潜规则 java入门-CSDN博客 C# 入坑JAVA 潜规则 大小写敏感文件名和类名 枚举等 入门系列2-CSDN博客 java注解 好像和C# 特性 差不多 Data Builder NoArgsConstructor AllArgsConstructor 在Java中,Data、Builder、NoArgsConstructor和Al…...

2024年9月个人工作生活总结
本文为 2024年9月工作生活总结。 研发编码 vuepress构建的几个问题 某vuepress项目,是我在3年多以前自行构想自行着手搞的,主要用于将一些常用的数据文件(markdown样式)渲染成html网页文件,在自建服务程序里开启访问…...

JVM有哪些参数以及如何使用
JVM(Java虚拟机)参数用于调整和优化Java应用程序的性能和行为。这些参数主要分为标准参数、非标准参数(以-X开头)和高级参数(以-XX开头)。以下是一些常见的JVM参数及其使用方法: 标准参数 -se…...

STM32编码器接口解析及抗噪声措施探讨
1. 引言 在现代控制系统中,编码器扮演着非常重要的角色。它就像一个精密的测量工具,可以告诉我们机械部件的位置和运动状态。在STM32微控制器中,编码器接口可以轻松地与各种编码器连接,实现精确的控制。我将在这里探讨STM32编码器…...

微软发布Windows 11 2024更新,新型Copilot+ AI PC功能亮相
前言 微软在Windows 11的2024更新中加强了对人工智能的应用,推出了新功能Copilot。 此次更新的版本号为26100.1742,Copilot将首先在Windows Insider中推出,计划于11月向特定设备和市场推广,用户需开启“尽快获取最新更新”选项以…...

鹏哥C语言68-70---位操作符+单目操作符+关系操作符
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <time.h> //--------------------------------------------------------------------------------------------------------4.位操作符 // &----按(2进制…...

showdoc二次开发
showdoc用的vue版本老,需要安装老版本nodejs,比如node 14.21.3 win32-x64-93_binding.node问题 https://github.com/sass/node-sass/releases 下载 web_src\node_modules\node-sass\vendor\win32-x64-93 下面重命名为binding.node 代理到php后端&…...

力扣16~20题
题16(中等): 思路: 双指针法,和15题差不多,就是要排除了,如果total<target则排除了更小的(left右移),如果total>target则排除了更大的(rig…...

Pikachu-Sql-Inject -基于boolian的盲注
基于boolean的盲注: 1、没有报错信息显示; 2、不管是正确的输入,还是错误的输入,都只显示两种情况,true or false; 3、在正确的输入下,输入and 1 1/and 1 2发现可以判断; 布尔盲注常用函数&…...