跳到主要内容多款实用 Python 脚本实现工作自动化 | 极客日志Python
多款实用 Python 脚本实现工作自动化
综述由AI生成多款实用的 Python 脚本,涵盖文件自动化管理、网络数据抓取、文本处理及邮件自动化四大场景。内容包括按扩展名排序文件、删除空目录、批量重命名、网页数据提取、图片下载、表单提交、词数统计、文本替换、随机文本生成以及多种邮件发送方式。文章提供了完整的代码示例、依赖安装说明及安全注意事项,帮助开发者快速上手 Python 自动化任务,提升工作效率。
狂少11 浏览 多款实用 Python 脚本实现工作自动化
Python 是一种流行的编程语言,以其简洁和易读性而闻名。它提供了大量的库和模块,使其成为自动化各种任务的绝佳选择。无论是文件管理、网络数据抓取、文本处理还是邮件自动化,Python 都能提供高效的解决方案。
本文将探讨多个 Python 脚本及其代码,帮助您自动化各种任务并提高工作效率。无论您是开发人员、数据分析师还是只是想简化工作流程的人,这些脚本都能满足您的需求。
环境准备
在开始之前,请确保您的环境中已安装 Python 3.6 或更高版本。部分脚本需要额外的第三方库,建议使用 pip 进行安装:
pip install requests beautifulsoup4
对于涉及邮件发送的脚本,无需额外安装库,但需确保网络连接正常。
一、自动化文件管理
文件系统是日常工作中最频繁交互的部分。通过脚本自动整理文件,可以显著减少手动操作时间。
1. 按扩展名对目录中的文件进行排序
此脚本通过根据文件扩展名将文件分类到子目录中来整理目录中的文件。它识别文件扩展名并将文件移动到相应的子目录中。这对于清理下载文件夹或为特定项目组织文件非常有用。
import os
from shutil import move
def sort_files(directory_path):
"""
将指定目录下的文件按扩展名归类到子目录中
:param directory_path: 目标目录路径
"""
try:
for filename in os.listdir(directory_path):
file_path = os.path.join(directory_path, filename)
if os.path.isfile(file_path):
_, ext = os.path.splitext(filename)
ext_name = ext[1:].lower() if ext else 'no_extension'
destination_directory = os.path.join(directory_path, ext_name)
if not os.path.exists(destination_directory):
os.makedirs(destination_directory)
dest_path = os.path.join(destination_directory, filename)
if not os.path.exists(dest_path):
move(file_path, dest_path)
print(f'Moved: -> /')
PermissionError:
()
Exception e:
()
{filename}
{ext_name}
except
print
'错误:没有权限访问该目录'
except
as
print
f'发生未知错误:{e}'
2. 删除空文件夹
此脚本在指定目录中搜索并删除空文件夹。它可以帮助您保持整洁的文件夹结构,特别是在处理大量数据集时。递归遍历确保深层嵌套的空目录也能被清理。
import os
def remove_empty_folders(directory_path):
"""
递归删除指定目录下的所有空文件夹
:param directory_path: 目标目录路径
"""
for root, dirs, files in os.walk(directory_path, topdown=False):
for folder in dirs:
folder_path = os.path.join(root, folder)
if not os.listdir(folder_path):
try:
os.rmdir(folder_path)
print(f'Deleted empty folder: {folder_path}')
except OSError:
print(f'无法删除文件夹:{folder_path}')
3. 批量重命名文件
这个 Python 脚本允许您同时重命名目录中的多个文件。它接受旧名称和新名称作为输入,并将符合指定条件的所有文件的旧名称替换为新名称。这在处理历史遗留数据或统一命名规范时非常有效。
import os
def rename_files(directory_path, old_name, new_name):
"""
批量重命名包含特定字符串的文件
:param directory_path: 目标目录路径
:param old_name: 需要替换的旧字符串
:param new_name: 替换后的新字符串
"""
count = 0
for filename in os.listdir(directory_path):
if old_name in filename:
new_filename = filename.replace(old_name, new_name)
src_path = os.path.join(directory_path, filename)
dst_path = os.path.join(directory_path, new_filename)
if not os.path.exists(dst_path):
os.rename(src_path, dst_path)
count += 1
print(f'Renamed: {filename} -> {new_filename}')
else:
print(f'Skipped (exists): {new_filename}')
print(f'Total renamed: {count}')
二、用 Python 进行网络爬虫
网络爬虫是获取公开数据的强大工具。以下脚本展示了如何使用 requests 和 BeautifulSoup 进行基础的数据提取和下载。
注意: 在进行网络爬虫时,请务必遵守目标网站的 robots.txt 协议和服务条款,控制请求频率,避免对服务器造成压力。
1. 从网站提取数据
这个 Python 脚本利用 requests 和 BeautifulSoup 库从一个网站上爬取数据。它获取网页的内容,并使用 BeautifulSoup 解析 HTML。您可以自定义脚本以提取特定的数据,如标题、产品信息或价格。
import requests
from bs4 import BeautifulSoup
def scrape_data(url):
"""
从指定 URL 提取页面标题和段落内容
:param url: 目标网页地址
"""
headers = {'User-Agent': 'Mozilla/5.0'}
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.string if soup.title else 'No Title'
paragraphs = [p.get_text(strip=True) for p in soup.find_all('p')]
return {
'title': title,
'content_count': len(paragraphs),
'sample_content': paragraphs[:3] if paragraphs else []
}
except requests.exceptions.RequestException as e:
print(f'请求失败:{e}')
return None
2. 批量下载图片
这个 Python 脚本旨在从网站批量下载图片。它假设该网站提供一个返回图像 URL 数组的 JSON API。然后,脚本遍历这些 URL 并下载图片,将其保存到指定目录中。
import requests
import os
def download_images(url, save_directory):
"""
从 API 获取图片 URL 并批量下载
:param url: 返回图片 URL 列表的 API 地址
:param save_directory: 保存目录
"""
if not os.path.exists(save_directory):
os.makedirs(save_directory)
try:
response = requests.get(url)
if response.status_code == 200:
images = response.json()
for index, image_url in enumerate(images):
img_response = requests.get(image_url, stream=True)
if img_response.status_code == 200:
with open(f"{save_directory}/image_{index}.jpg", "wb") as f:
for chunk in img_response.iter_content(1024):
f.write(chunk)
print(f'Downloaded: image_{index}.jpg')
else:
print(f'API 请求失败:{response.status_code}')
except Exception as e:
print(f'下载过程出错:{e}')
3. 自动化表单提交
这个 Python 脚本通过发送带有表单数据的 POST 请求来自动化网站上的表单提交。您可以通过提供 URL 和需要提交的必要表单数据来定制脚本。常用于注册、登录或数据上报场景。
import requests
def submit_form(url, form_data):
"""
提交表单数据
:param url: 表单提交地址
:param form_data: 字典形式的表单数据
"""
try:
response = requests.post(url, data=form_data, timeout=10)
if response.status_code == 200:
print('表单提交成功')
return True
else:
print(f'提交失败,状态码:{response.status_code}')
return False
except Exception as e:
print(f'提交异常:{e}')
return False
三、文本处理和操作
文本处理是数据分析的基础。Python 内置的文件操作功能配合正则表达式,可以轻松完成复杂的文本任务。
1. 在文本文件中计算单词数
这个 Python 脚本读取一个文本文件并计算其中包含的单词数量。它可以用于快速分析文本文档的内容,或者跟踪写作项目中的字数统计。支持 UTF-8 编码。
import re
def count_words(file_path):
"""
统计文本文件中的单词数量
:param file_path: 文件路径
:return: 单词总数
"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
text = f.read()
words = re.findall(r'\b\w+\b', text)
return len(words)
except FileNotFoundError:
print(f'文件未找到:{file_path}')
return 0
except UnicodeDecodeError:
print(f'编码错误,请尝试其他编码格式')
return 0
2. 查找和替换文本
这个 Python 脚本在文件中搜索特定文本,并将其替换为所需的文本。它可以帮助批量替换某些短语或纠正大型文本文件中的错误。支持原地修改文件。
import os
def find_replace(file_path, search_text, replace_text):
"""
在文件中查找并替换文本
:param file_path: 文件路径
:param search_text: 要查找的文本
:param replace_text: 替换后的文本
"""
if not os.path.exists(file_path):
print(f'文件不存在:{file_path}')
return
try:
with open(file_path, 'r', encoding='utf-8') as f:
text = f.read()
modified_text = text.replace(search_text, replace_text)
if text != modified_text:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(modified_text)
print(f'替换完成:{search_text} -> {replace_text}')
else:
print('未找到匹配项')
except Exception as e:
print(f'操作失败:{e}')
3. 生成随机文本
这个 Python 脚本生成指定长度的随机文本。它可以用于测试和模拟,甚至可以作为创意写作的随机内容来源。常用于生成测试数据或占位符。
import random
import string
def generate_random_text(length):
"""
生成指定长度的随机字符串
:param length: 长度
:return: 随机字符串
"""
letters = string.ascii_letters + string.digits + string.punctuation
random_text = ''.join(random.choice(letters) for i in range(length))
return random_text
四、自动化电子邮件
邮件自动化是企业级应用和个人通知的重要环节。Python 的 smtplib 模块提供了强大的 SMTP 客户端功能。
1. 发送个性化电子邮件
此 Python 脚本使您能够向一组收件人发送个性化的电子邮件。您可以自定义发件人的电子邮件、密码、主题、正文以及收件人电子邮件列表。
安全提示: 出于安全原因,在使用 Gmail 时应使用特定于应用程序的密码,而不是主账号密码。切勿将密码硬编码在代码中,建议使用环境变量。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os
def send_personalized_email(sender_email, sender_password, recipients, subject, body):
"""
向多个收件人发送个性化邮件
:param sender_email: 发件人邮箱
:param sender_password: 发件人授权码/密码
:param recipients: 收件人列表
:param subject: 邮件主题
:param body: 邮件正文
"""
server = None
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, sender_password)
for recipient_email in recipients:
message = MIMEMultipart()
message['From'] = sender_email
message['To'] = recipient_email
message['Subject'] = subject
message.attach(MIMEText(body, 'plain'))
server.sendmail(sender_email, recipient_email, message.as_string())
print(f'Sent to: {recipient_email}')
except smtplib.SMTPAuthenticationError:
print('认证失败,请检查邮箱和密码')
except Exception as e:
print(f'发送邮件出错:{e}')
finally:
if server:
server.quit()
2. 发送电子邮件附件
这个 Python 脚本允许您发送带有文件附件的电子邮件。只需提供发件人的电子邮件、密码、收件人的电子邮件、主题、正文以及要附加的文件路径即可。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os
def send_email_with_attachment(sender_email, sender_password, recipient_email, subject, body, file_path):
"""
发送带附件的邮件
:param sender_email: 发件人
:param sender_password: 密码
:param recipient_email: 收件人
:param subject: 主题
:param body: 正文
:param file_path: 附件路径
"""
if not os.path.exists(file_path):
print(f'附件不存在:{file_path}')
return
server = None
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, sender_password)
message = MIMEMultipart()
message['From'] = sender_email
message['To'] = recipient_email
message['Subject'] = subject
message.attach(MIMEText(body, 'plain'))
with open(file_path, "rb") as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f"attachment; filename= {os.path.basename(file_path)}")
message.attach(part)
server.sendmail(sender_email, recipient_email, message.as_string())
print('邮件及附件发送成功')
except Exception as e:
print(f'发送失败:{e}')
finally:
if server:
server.quit()
3. 自动电子邮件提醒
此 Python 脚本根据指定日期发送自动电子邮件提醒。它对于设置重要任务或事件的提醒非常有用,确保您永远不会错过截止日期。可结合定时任务(如 cron)使用。
import smtplib
from email.mime.text import MIMEText
from datetime import datetime, timedelta
def send_reminder_email(sender_email, sender_password, recipient_email, subject, body, reminder_date):
"""
发送定时提醒邮件
:param sender_email: 发件人
:param sender_password: 密码
:param recipient_email: 收件人
:param subject: 主题
:param body: 正文
:param reminder_date: 提醒日期字符串 '%Y-%m-%d'
"""
now = datetime.now()
try:
target_date = datetime.strptime(reminder_date, '%Y-%m-%d')
if now.date() == target_date.date():
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, sender_password)
message = MIMEText(body, 'plain')
message['From'] = sender_email
message['To'] = recipient_email
message['Subject'] = subject
server.sendmail(sender_email, recipient_email, message.as_string())
server.quit()
print('提醒邮件已发送')
else:
print('未到提醒时间')
except ValueError:
print('日期格式错误,请使用 YYYY-MM-DD')
except Exception as e:
print(f'发送出错:{e}')
结语
以上脚本涵盖了文件管理、网络数据、文本处理和邮件通信四个核心领域。通过组合这些脚本,您可以构建更复杂的自动化工作流。建议在实际使用前先在沙箱环境中测试,并注意敏感信息的保护。随着经验的积累,您还可以探索 Selenium 进行浏览器自动化,或使用 Airflow 调度复杂任务。
相关免费在线工具
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online