引言:告别重复,拥抱效率!
在日常工作中,你是否曾被那些枯燥、重复、耗时的数据处理、文件整理或信息录入任务所困扰?想象一下,如果有一个“智能助手”能够帮你自动完成这些繁琐的工作,那该有多棒!
好消息是,这个“智能助手”就是python!python以其简洁的语法和强大的库生态,成为了自动化办公领域的利器。无论你是数据分析师、行政人员、市场营销,还是任何需要处理大量文件的职场人,掌握一些python自动化脚本都能极大地提升你的工作效率,让你有更多时间专注于创造性和战略性工作。
本篇博客将为你精心挑选并详细讲解15个超实用的python自动化办公脚本,涵盖文件操作、文本处理、excel/csv数据处理、图片操作等多个方面。即使你是编程小白,也能跟着我们的教程一步步操作,亲手体验python带来的效率革命!
准备好了吗?让我们一起用python解放双手,告别重复劳动,迈向高效办公的新时代!
准备工作:搭建你的python自动化环境
在开始编写脚本之前,我们需要先搭建好python的运行环境。别担心,这比你想象的要简单!
1. 安装python解释器
- 下载python
- 选择版本: 建议下载最新稳定版本(如python 3.9+)。
- 安装: 运行下载的安装包。特别注意:在安装过程中,务必勾选“add python to path”选项,这将使你能够在命令行中直接运行python。
- 验证安装: 打开命令行(windows按
win+r,输入cmd回车;macos/linux打开终端),输入python --version或python3 --version,如果显示python版本号,则说明安装成功。
2. 安装代码编辑器(推荐vs code)
虽然任何文本编辑器都可以编写python代码,但专业的代码编辑器能提供语法高亮、代码补全、调试等功能,极大地提升开发体验。
- 下载vs code
- 安装: 按照指引安装即可。
- 安装python扩展: 打开vs code,在侧边栏点击“扩展”图标(或按
ctrl+shift+x),搜索“python”并安装由microsoft提供的扩展。
3. 安装必要的python库
python的强大之处在于其丰富的第三方库。我们将使用pip(python的包管理器)来安装这些库。
打开命令行/终端。
逐一安装以下库(有些脚本可能只用到其中一部分,但为了方便,我们一次性安装):
pip install pandas openpyxl pypdf2 pillow pyperclip requests beautifulsoup4 schedule
pandas: 处理excel和csv文件的利器。openpyxl: pandas处理xlsx格式文件需要依赖它。pypdf2: 用于pdf文件的读写操作。pillow: 强大的图像处理库。pyperclip: 方便地操作剪贴板。requests: 用于发送http请求,抓取网页内容。beautifulsoup4: 用于解析html/xml文档,提取数据。schedule: 用于定时任务。
实战脚本详解:15个超实用的自动化办公脚本
下面,我们将逐一介绍这15个脚本。每个脚本都包含详细的代码、用途说明和使用方法,请跟着步骤亲手实践!
重要提示:
- 文件路径: 在windows系统中,路径通常使用反斜杠
\(如c:\users\yourname\desktop)。在python字符串中,反斜杠是转义字符,所以你需要使用双反斜杠\\(如c:\\users\\yourname\\desktop),或者使用原始字符串r'c:\users\yourname\desktop'。更推荐的做法是使用正斜杠/,python在所有操作系统上都能很好地处理它 (如c:/users/yourname/desktop)。 - 代码保存: 将每个脚本的代码保存为一个
.py文件(例如rename_files.py)。 - 运行脚本: 在命令行/终端中,导航到你保存脚本的文件夹,然后运行
python your_script_name.py。
1. 批量重命名文件
这个脚本可以帮助你快速、批量地重命名一个文件夹内的所有文件,例如添加前缀、后缀或替换部分文件名。
- 用途: 整理照片、文档、下载文件时非常有用。
- 所需库:
os(python内置库)
import os
def batch_rename_files(folder_path, old_str, new_str):
"""
批量重命名指定文件夹下的文件。
:param folder_path: 文件夹路径
:param old_str: 文件名中需要被替换的旧字符串
:param new_str: 替换旧字符串的新字符串
"""
try:
for filename in os.listdir(folder_path):
if old_str in filename:
new_filename = filename.replace(old_str, new_str)
old_file_path = os.path.join(folder_path, filename)
new_file_path = os.path.join(folder_path, new_filename)
os.rename(old_file_path, new_file_path)
print(f"文件 '{filename}' 已重命名为 '{new_filename}'")
print("所有文件重命名完成!")
except exception as e:
print(f"发生错误: {e}")
if __name__ == "__main__":
# 请修改为你实际的文件夹路径、旧字符串和新字符串
folder = "d:/mydocuments/photos" # 示例路径
old_text = "img_"
new_text = "vacation_"
batch_rename_files(folder, old_text, new_text)
# 示例2: 添加前缀
# folder = "d:/mydocuments/reports"
# old_text = "" # 空字符串表示添加前缀
# new_text = "final_"
# batch_rename_files(folder, old_text, new_text)
使用方法:
- 将代码保存为
rename_files.py。 - 修改
folder变量为你需要操作的文件夹路径。 - 修改
old_text和new_text为你想要替换的字符串。 - 运行
python rename_files.py。
2. 按文件类型整理文件
这个脚本能自动识别文件类型(通过扩展名),并将它们移动到对应的子文件夹中,让你的文件夹井井有条。
- 用途: 桌面文件清理、下载文件夹整理。
- 所需库:
os,shutil(python内置库)
import os
import shutil
def organize_files_by_type(folder_path):
"""
根据文件类型(扩展名)将文件移动到对应的子文件夹中。
:param folder_path: 需要整理的文件夹路径
"""
try:
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path): # 确保是文件而不是文件夹
file_extension = os.path.splitext(filename)[1].lower() # 获取文件扩展名
if not file_extension: # 没有扩展名的文件跳过
continue
# 创建目标文件夹
target_folder = os.path.join(folder_path, file_extension[1:] + "_files") # 例如 ".txt" -> "txt_files"
os.makedirs(target_folder, exist_ok=true)
# 移动文件
shutil.move(file_path, target_folder)
print(f"文件 '{filename}' 已移动到 '{target_folder}'")
print("文件整理完成!")
except exception as e:
print(f"发生错误: {e}")
if __name__ == "__main__":
# 请修改为你实际的文件夹路径
folder = "d:/mydocuments/downloads" # 示例路径
organize_files_by_type(folder)
使用方法:
- 将代码保存为
organize_files.py。 - 修改
folder变量为你需要整理的文件夹路径。 - 运行
python organize_files.py。
3. 查找并删除空文件夹
这个脚本可以递归地遍历指定目录,找出并删除所有空文件夹,帮助你清理磁盘空间。
用途: 清理项目残余、旧的下载目录等。
所需库: os (python内置库)
import os
def delete_empty_folders(folder_path):
"""
递归查找并删除指定路径下的所有空文件夹。
:param folder_path: 需要清理的根文件夹路径
:return: 被删除的空文件夹数量
"""
deleted_count = 0
for dirpath, dirnames, filenames in os.walk(folder_path, topdown=false):
# topdown=false 确保先处理子目录,再处理父目录
if not dirnames and not filenames:
try:
os.rmdir(dirpath)
print(f"已删除空文件夹: {dirpath}")
deleted_count += 1
except oserror as e:
print(f"无法删除文件夹 {dirpath}: {e}")
return deleted_count
if __name__ == "__main__":
# 请修改为你实际的根文件夹路径
root_folder = "d:/mydocuments/temp" # 示例路径
print(f"开始清理 '{root_folder}' 下的空文件夹...")
count = delete_empty_folders(root_folder)
print(f"清理完成,共删除 {count} 个空文件夹。")
使用方法:
- 将代码保存为
delete_empty_folders.py。 - 修改
root_folder变量为你需要清理的根文件夹路径。 - 运行
python delete_empty_folders.py。
4. 合并多个txt文件
将多个文本文件内容合并到一个新的文本文件中,非常适合合并日志、报告等。
用途: 汇总报告、日志分析。
所需库: python内置的文件i/o操作
import os
def merge_txt_files(folder_path, output_filename="merged_output.txt"):
"""
合并指定文件夹下所有txt文件的内容到一个新的txt文件。
:param folder_path: 包含txt文件的文件夹路径
:param output_filename: 合并后的输出文件名
"""
output_path = os.path.join(folder_path, output_filename)
try:
with open(output_path, 'w', encoding='utf-8') as outfile:
for filename in os.listdir(folder_path):
if filename.endswith(".txt") and filename != output_filename:
filepath = os.path.join(folder_path, filename)
try:
with open(filepath, 'r', encoding='utf-8') as infile:
outfile.write(f"--- 文件开始: {filename} ---\n")
outfile.write(infile.read())
outfile.write(f"\n--- 文件结束: {filename} ---\n\n")
print(f"已合并文件: {filename}")
except unicodedecodeerror:
print(f"警告: 文件 '{filename}' 编码错误,尝试使用gbk...")
try:
with open(filepath, 'r', encoding='gbk') as infile:
outfile.write(f"--- 文件开始: {filename} (gbk编码) ---\n")
outfile.write(infile.read())
outfile.write(f"\n--- 文件结束: {filename} (gbk编码) ---\n\n")
print(f"已合并文件: {filename} (gbk)")
except exception as e:
print(f"错误: 无法读取文件 '{filename}' ({e})")
except exception as e:
print(f"错误: 读取文件 '{filename}' 失败 ({e})")
print(f"\n所有txt文件已成功合并到 '{output_path}'")
except exception as e:
print(f"发生错误: {e}")
if __name__ == "__main__":
# 请修改为你实际的文件夹路径
folder = "d:/mydocuments/reports" # 示例路径
merge_txt_files(folder, "annual_report_combined.txt")
使用方法:
- 将代码保存为
merge_txt.py。 - 修改
folder变量为你需要合并txt文件的文件夹路径。 - (可选)修改
output_filename为你想要的输出文件名。 - 运行
python merge_txt.py。
5. 批量查找替换文本内容
在多个文本文件或代码文件中批量查找并替换指定字符串,省去手动修改的麻烦。
用途: 代码重构、文档更新、统一术语。
所需库: python内置的文件i/o操作
import os
def batch_find_replace(folder_path, old_text, new_text, file_extension=".txt"):
"""
在指定文件夹下所有指定类型的文件中查找并替换文本。
:param folder_path: 文件夹路径
:param old_text: 需要查找的旧文本
:param new_text: 替换旧文本的新文本
:param file_extension: 需要处理的文件扩展名 (例如 ".txt", ".md", ".py")
"""
replaced_count = 0
for filename in os.listdir(folder_path):
if filename.endswith(file_extension):
filepath = os.path.join(folder_path, filename)
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
if old_text in content:
new_content = content.replace(old_text, new_text)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"文件 '{filename}' 中的 '{old_text}' 已替换为 '{new_text}'")
replaced_count += 1
except unicodedecodeerror:
print(f"警告: 文件 '{filename}' 编码错误,跳过。")
except exception as e:
print(f"处理文件 '{filename}' 时发生错误: {e}")
print(f"\n批量查找替换完成,共修改了 {replaced_count} 个文件。")
if __name__ == "__main__":
# 请修改为你实际的文件夹路径、旧文本、新文本和文件扩展名
folder = "d:/mydocuments/projects/mycode" # 示例路径
old_string = "deprecated_function"
new_string = "new_function_v2"
file_ext = ".py" # 例如,可以修改为 ".txt", ".md", ".html" 等
batch_find_replace(folder, old_string, new_string, file_ext)
使用方法:
- 将代码保存为
batch_replace.py。 - 修改
folder、old_string、new_string和file_ext。 - 运行
python batch_replace.py。
6. 将csv文件转换为excel
将一个或多个csv文件转换为excel的xlsx格式,方便数据管理和共享。
用途: 数据格式转换、兼容不同软件。
所需库: pandas
import pandas as pd
import os
def csv_to_excel(csv_folder_path, output_excel_filename="merged_output.xlsx"):
"""
将指定文件夹下的所有csv文件合并并转换为一个excel文件。
:param csv_folder_path: 包含csv文件的文件夹路径
:param output_excel_filename: 输出的excel文件名
"""
all_data = []
for filename in os.listdir(csv_folder_path):
if filename.endswith(".csv"):
filepath = os.path.join(csv_folder_path, filename)
try:
# 尝试多种编码读取csv
df = pd.read_csv(filepath, encoding='utf-8')
all_data.append(df)
print(f"已读取csv文件: {filename}")
except unicodedecodeerror:
print(f"警告: csv文件 '{filename}' 编码错误,尝试使用gbk...")
try:
df = pd.read_csv(filepath, encoding='gbk')
all_data.append(df)
print(f"已读取csv文件: {filename} (gbk)")
except exception as e:
print(f"错误: 无法读取csv文件 '{filename}' ({e})")
except exception as e:
print(f"处理csv文件 '{filename}' 时发生错误: {e}")
if not all_data:
print("未找到任何csv文件或所有文件读取失败。")
return
# 合并所有dataframe
merged_df = pd.concat(all_data, ignore_index=true)
# 写入excel
output_path = os.path.join(csv_folder_path, output_excel_filename)
try:
merged_df.to_excel(output_path, index=false)
print(f"\n所有csv文件已成功合并并转换为excel文件: '{output_path}'")
except exception as e:
print(f"写入excel文件失败: {e}")
if __name__ == "__main__":
# 请修改为你实际的文件夹路径和输出文件名
csv_folder = "d:/mydocuments/data/sales" # 示例路径
csv_to_excel(csv_folder, "sales_data_combined.xlsx")
使用方法:
- 将代码保存为
csv_to_excel.py。 - 修改
csv_folder变量为你包含csv文件的文件夹路径。 - (可选)修改
output_excel_filename。 - 运行
python csv_to_excel.py。
7. 合并多个excel文件
将多个excel文件(或同一个excel文件的多个工作表)合并到一个新的excel文件中的不同工作表,或合并到一个工作表中。
用途: 汇总各部门报告、合并不同日期的数据。
所需库: pandas
import pandas as pd
import os
def merge_excel_files(excel_folder_path, output_excel_filename="merged_all_data.xlsx"):
"""
将指定文件夹下的所有excel文件(每个文件作为一个工作表)合并到一个新的excel文件。
:param excel_folder_path: 包含excel文件的文件夹路径
:param output_excel_filename: 输出的excel文件名
"""
output_path = os.path.join(excel_folder_path, output_excel_filename)
writer = pd.excelwriter(output_path, engine='openpyxl')
for filename in os.listdir(excel_folder_path):
if filename.endswith((".xlsx", ".xls")) and filename != output_excel_filename:
filepath = os.path.join(excel_folder_path, filename)
try:
df = pd.read_excel(filepath)
sheet_name = os.path.splitext(filename)[0][:30] # 工作表名称不能太长
df.to_excel(writer, sheet_name=sheet_name, index=false)
print(f"已将文件 '{filename}' 写入到工作表 '{sheet_name}'")
except exception as e:
print(f"处理excel文件 '{filename}' 时发生错误: {e}")
try:
writer.save()
print(f"\n所有excel文件已成功合并到 '{output_path}'")
except exception as e:
print(f"写入excel文件失败: {e}")
if __name__ == "__main__":
# 请修改为你实际的文件夹路径和输出文件名
excel_folder = "d:/mydocuments/data/monthlyreports" # 示例路径
merge_excel_files(excel_folder, "combined_monthly_reports.xlsx")
使用方法:
- 将代码保存为
merge_excel.py。 - 修改
excel_folder变量为你包含excel文件的文件夹路径。 - (可选)修改
output_excel_filename。 - 运行
python merge_excel.py。
8. 从excel中提取特定数据
根据条件从excel文件中筛选、提取所需的数据,并保存为新的excel文件或csv文件。
用途: 数据分析预处理、生成报告子集。
所需库: pandas
import pandas as pd
import os
def extract_data_from_excel(input_excel_path, output_filename="extracted_data.xlsx"):
"""
从excel文件中读取数据,并根据条件提取特定数据。
:param input_excel_path: 输入的excel文件路径
:param output_filename: 提取数据后保存的输出文件名
"""
try:
df = pd.read_excel(input_excel_path)
print("原始数据前5行:")
print(df.head())
# 示例:提取 '销售额' 大于 5000 且 '地区' 为 '华东' 的数据
# 请根据你的实际数据列名和条件进行修改
extracted_df = df[(df['销售额'] > 5000) & (df['地区'] == '华东')]
output_path = os.path.join(os.path.dirname(input_excel_path), output_filename)
extracted_df.to_excel(output_path, index=false)
print(f"\n成功提取数据并保存到 '{output_path}'")
print("提取数据前5行:")
print(extracted_df.head())
except filenotfounderror:
print(f"错误: 文件未找到 '{input_excel_path}'")
except keyerror as e:
print(f"错误: excel文件中缺少列 '{e}'。请检查列名是否正确。")
except exception as e:
print(f"处理excel文件时发生错误: {e}")
if __name__ == "__main__":
# 请修改为你实际的输入excel文件路径
input_file = "d:/mydocuments/data/sales_data.xlsx" # 示例路径
# 请确保你的excel文件中有 '销售额' 和 '地区' 列,并包含相应的数据
# 如果没有,请根据你的数据调整筛选条件或创建示例excel文件进行测试。
# 示例excel文件内容 (sales_data.xlsx):
# 销售员,地区,销售额,产品
# 张三,华东,6000,a
# 李四,华南,4500,b
# 王五,华东,7200,c
# 赵六,华北,3000,a
# 钱七,华东,5500,b
extract_data_from_excel(input_file, "high_sales_east_region.xlsx")
使用方法:
- 将代码保存为
extract_excel_data.py。 - 修改
input_file为你的excel文件路径。 - 根据你的excel文件内容,修改
extracted_df这一行中的列名和筛选条件。 - 运行
python extract_excel_data.py。
9. 批量图片缩放
批量调整一个文件夹内所有图片的尺寸,可用于优化网站图片、制作缩略图等。
用途: 网站图片优化、批量生成缩略图。
所需库: pillow (pil)
from pil import image
import os
def batch_resize_images(folder_path, output_folder_name="resized_images", size=(800, 600)):
"""
批量缩放指定文件夹下的所有图片。
:param folder_path: 包含图片的文件夹路径
:param output_folder_name: 缩放后图片保存的子文件夹名称
:param size: 目标尺寸 (宽度, 高度)
"""
output_folder = os.path.join(folder_path, output_folder_name)
os.makedirs(output_folder, exist_ok=true)
for filename in os.listdir(folder_path):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
filepath = os.path.join(folder_path, filename)
try:
with image.open(filepath) as img:
img_resized = img.resize(size)
output_filepath = os.path.join(output_folder, filename)
img_resized.save(output_filepath)
print(f"图片 '{filename}' 已缩放并保存到 '{output_folder_name}'")
except exception as e:
print(f"处理图片 '{filename}' 时发生错误: {e}")
print("\n所有图片缩放完成!")
if __name__ == "__main__":
# 请修改为你实际的图片文件夹路径和目标尺寸
image_folder = "d:/mydocuments/imagegallery" # 示例路径
target_size = (1280, 720) # 目标宽度和高度
batch_resize_images(image_folder, size=target_size)
使用方法:
- 将代码保存为
resize_images.py。 - 修改
image_folder为你的图片文件夹路径。 - 修改
target_size为你想要的图片尺寸。 - 运行
python resize_images.py。
10. 批量图片格式转换
将一个文件夹内的所有图片批量转换为另一种格式(例如png转jpg,或jpg转png)。
用途: 统一图片格式、兼容不同平台。
所需库: pillow (pil)
from pil import image
import os
def batch_convert_images(folder_path, output_folder_name="converted_images", target_format="png"):
"""
批量转换指定文件夹下的所有图片格式。
:param folder_path: 包含图片的文件夹路径
:param output_folder_name: 转换后图片保存的子文件夹名称
:param target_format: 目标格式 (例如 "png", "jpeg", "bmp")
"""
output_folder = os.path.join(folder_path, output_folder_name)
os.makedirs(output_folder, exist_ok=true)
for filename in os.listdir(folder_path):
# 排除已是目标格式的文件,防止重复处理
if not filename.lower().endswith(f'.{target_format.lower()}'):
filepath = os.path.join(folder_path, filename)
try:
with image.open(filepath) as img:
# 构建新的文件名和路径
base_name = os.path.splitext(filename)[0]
output_filepath = os.path.join(output_folder, f"{base_name}.{target_format.lower()}")
img.save(output_filepath, format=target_format)
print(f"图片 '{filename}' 已转换为 {target_format} 格式并保存到 '{output_folder_name}'")
except exception as e:
print(f"处理图片 '{filename}' 时发生错误: {e}")
print("\n所有图片格式转换完成!")
if __name__ == "__main__":
# 请修改为你实际的图片文件夹路径和目标格式
image_folder = "d:/mydocuments/imagegallery" # 示例路径
target_format = "jpeg" # 例如 "png", "jpeg", "bmp"
batch_convert_images(image_folder, target_format=target_format)
使用方法:
- 将代码保存为
convert_images.py。 - 修改
image_folder为你的图片文件夹路径。 - 修改
target_format为你想要转换的目标格式(如 “jpeg”, “png”)。 - 运行
python convert_images.py。
11. 自动打开指定网页
使用默认浏览器打开一个或多个指定的网页链接。
用途: 每日工作网站快速启动、批量打开参考资料。
所需库: webbrowser (python内置库)
import webbrowser
import time
def open_websites(urls):
"""
在默认浏览器中打开一个或多个指定的网页链接。
:param urls: 一个包含网页链接的列表
"""
for url in urls:
try:
webbrowser.open_new_tab(url)
print(f"已打开网页: {url}")
time.sleep(1) # 暂停1秒,避免同时打开过多标签页导致浏览器卡顿
except exception as e:
print(f"无法打开网页 '{url}': {e}")
print("\n所有指定网页已尝试打开。")
if __name__ == "__main__":
# 请修改为你需要打开的网页链接列表
my_work_websites = [
"https://www.google.com",
"https://chat.openai.com",
"https://github.com",
"https://www.example.com" # 替换为你的实际网址
]
open_websites(my_work_websites)
使用方法:
- 将代码保存为
open_websites.py。 - 修改
my_work_websites列表,填入你想要打开的网址。 - 运行
python open_websites.py。
12. 定时提醒/消息
设置一个定时提醒,在指定时间后弹出一个简单的消息。这个例子使用命令行输出,你可以进一步扩展为桌面通知。
用途: 午休提醒、会议提醒、任务截止提醒。
所需库: time (python内置库)
import time
def set_timer_reminder(minutes, message):
"""
设置一个定时提醒。
:param minutes: 提醒间隔时间(分钟)
:param message: 提醒消息内容
"""
seconds = minutes * 60
print(f"提醒已设置!将在 {minutes} 分钟后(即 {seconds} 秒后)显示消息:'{message}'")
time.sleep(seconds)
print("\n" + "="*30)
print(f"提醒时间到!消息:{message}")
print("="*30 + "\n")
if __name__ == "__main__":
# 请修改为你需要设置的提醒时间和消息
reminder_minutes = 30 # 30分钟后提醒
reminder_message = "该休息一下眼睛了!"
set_timer_reminder(reminder_minutes, reminder_message)
# 另一个例子
# set_timer_reminder(5, "记得保存当前工作!")
使用方法:
- 将代码保存为
timer_reminder.py。 - 修改
reminder_minutes为你想要设置的分钟数。 - 修改
reminder_message为你想要显示的提醒消息。 - 运行
python timer_reminder.py。
13. 剪贴板内容操作
快速获取剪贴板内容或将文本复制到剪贴板,实现自动化复制粘贴。
用途: 批量复制粘贴、快速填充表单。
所需库: pyperclip
import pyperclip
def clipboard_operations():
"""
演示剪贴板的复制和粘贴操作。
"""
print("--- 剪贴板操作演示 ---")
# 1. 获取剪贴板内容
try:
clipboard_content = pyperclip.paste()
print(f"当前剪贴板内容: '{clipboard_content}'")
except pyperclip.pyperclipexception as e:
print(f"无法获取剪贴板内容: {e}. 请确保安装了必要的剪贴板后端(如xclip/xsel on linux)。")
return # 如果无法获取,则退出,避免后续错误
# 2. 将文本复制到剪贴板
text_to_copy = "hello, python automation!"
pyperclip.copy(text_to_copy)
print(f"已将文本 '{text_to_copy}' 复制到剪贴板。")
# 3. 再次获取剪贴板内容,验证是否成功复制
new_clipboard_content = pyperclip.paste()
print(f"验证:新的剪贴板内容为: '{new_clipboard_content}'")
if new_clipboard_content == text_to_copy:
print("剪贴板操作成功!")
else:
print("剪贴板操作可能出现问题。")
if __name__ == "__main__":
clipboard_operations()
使用方法:
- 将代码保存为
clipboard_tool.py。 - 运行
python clipboard_tool.py。 - 你可以手动复制一些文本到剪贴板,然后运行脚本查看。
14. pdf文件合并
将多个pdf文件合并为一个pdf文件。
用途: 合并报告、合同、扫描件。
所需库: pypdf2
from pypdf2 import pdfmerger
import os
def merge_pdf_files(folder_path, output_filename="merged_document.pdf"):
"""
合并指定文件夹下的所有pdf文件。
:param folder_path: 包含pdf文件的文件夹路径
:param output_filename: 合并后的输出文件名
"""
merger = pdfmerger()
pdf_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.pdf')]
pdf_files.sort() # 按文件名排序,确保合并顺序
if not pdf_files:
print("在指定文件夹中未找到任何pdf文件。")
return
for filename in pdf_files:
filepath = os.path.join(folder_path, filename)
try:
merger.append(filepath)
print(f"已添加文件: {filename}")
except exception as e:
print(f"无法添加文件 '{filename}': {e}")
output_path = os.path.join(folder_path, output_filename)
try:
with open(output_path, "wb") as output_file:
merger.write(output_file)
print(f"\n所有pdf文件已成功合并到 '{output_path}'")
except exception as e:
print(f"写入合并pdf文件失败: {e}")
finally:
merger.close()
if __name__ == "__main__":
# 请修改为你实际的pdf文件夹路径
pdf_folder = "d:/mydocuments/reports/quarterly" # 示例路径
merge_pdf_files(pdf_folder, "q4_combined_report.pdf")
使用方法:
- 将代码保存为
merge_pdf.py。 - 修改
pdf_folder为你的pdf文件文件夹路径。 - (可选)修改
output_filename。 - 运行
python merge_pdf.py。
15. pdf文本内容提取
从pdf文件中提取所有文本内容,并保存到txt文件中。
用途: pdf内容检索、数据抽取、文本分析。
所需库: pypdf2
from pypdf2 import pdfreader
import os
def extract_text_from_pdf(pdf_path, output_txt_filename=none):
"""
从pdf文件中提取所有文本内容并保存到txt文件。
:param pdf_path: 输入的pdf文件路径
:param output_txt_filename: 输出的txt文件名 (如果为none,则使用pdf文件名)
"""
if not output_txt_filename:
base_name = os.path.splitext(os.path.basename(pdf_path))[0]
output_txt_filename = f"{base_name}_extracted.txt"
output_path = os.path.join(os.path.dirname(pdf_path), output_txt_filename)
try:
reader = pdfreader(pdf_path)
text_content = ""
for page in reader.pages:
text_content += page.extract_text() + "\n" # 提取每页文本并换行
with open(output_path, 'w', encoding='utf-8') as f:
f.write(text_content)
print(f"成功从 '{pdf_path}' 提取文本并保存到 '{output_path}'")
except filenotfounderror:
print(f"错误: pdf文件未找到 '{pdf_path}'")
except exception as e:
print(f"处理pdf文件时发生错误: {e}")
if __name__ == "__main__":
# 请修改为你实际的pdf文件路径
input_pdf = "d:/mydocuments/documents/contract_draft.pdf" # 示例路径
extract_text_from_pdf(input_pdf)
# 也可以指定输出文件名
# extract_text_from_pdf(input_pdf, "contract_text.txt")
使用方法:
- 将代码保存为
extract_pdf_text.py。 - 修改
input_pdf为你的pdf文件路径。 - (可选)修改
output_txt_filename。 - 运行
python extract_pdf_text.py。
常见问题与提示
在实践这些脚本时,你可能会遇到一些问题。以下是一些常见问题及其解决方案:
1.modulenotfounderror (模块未找到错误):
- 原因: 对应的python库没有安装。
- 解决方案: 确保你按照“准备工作”章节的指示,使用
pip install 库名安装了所有必要的库。例如,如果出现modulenotfounderror: no module named 'pandas',则运行pip install pandas。
2.文件路径问题 (filenotfounderror / permissionerror):
原因: 文件路径不正确,或者你没有访问该路径的权限。
解决方案:
- 仔细检查路径字符串是否拼写正确,包括大小写。
- windows路径建议使用正斜杠
/(例如c:/users/desktop/) 或双反斜杠\\(例如c:\\users\\desktop\\),或者使用原始字符串r'c:\users\desktop\'。 - 确保python脚本有权限读写目标文件夹。如果是在系统保护目录(如
c:\windows或程序文件目录)操作,可能会遇到权限问题。尝试将文件放在用户目录(如桌面、文档)进行测试。
3.编码问题 (unicodedecodeerror):
- 原因: 文本文件(如txt、csv)的编码格式与脚本中指定的编码不一致(默认为utf-8)。
- 解决方案: 在
open()函数中尝试不同的编码,如encoding='gbk'、encoding='latin-1'。在我们的脚本中已经尝试了utf-8和gbk。
4.文件被占用:
- 原因: 你正在尝试操作的文件被其他程序(如excel、word、图片查看器)打开并占用。
- 解决方案: 关闭所有可能占用目标文件的程序,然后再运行脚本。
5.不熟悉命令行操作:
解决方案: 多加练习。记住 cd 命令用于切换目录,dir (windows) 或 ls (macos/linux) 用于列出当前目录内容,python your_script.py 用于运行脚本。
6.代码错误 (syntaxerror, typeerror 等):
解决方案:
- 仔细阅读错误信息,它通常会告诉你错误发生在哪一行以及错误类型。
- 使用vs code等编辑器,它们通常会高亮显示语法错误。
- 对于初学者,逐步运行(或在关键位置添加
print()语句)是很好的调试方法,可以查看变量的值和代码的执行流程。
总结与展望
恭喜你!通过学习和实践这15个自动化脚本,你已经迈出了python自动化办公的第一步。你不仅学会了如何用代码解决实际工作中的痛点,更重要的是,你掌握了一种全新的思考问题和提升效率的方式。
python自动化办公的潜力远不止于此。你可以继续探索:
- 更复杂的excel操作: 数据透 视、图表生成、与其他数据源联动。
- web自动化: 使用
selenium模拟浏览器操作,实现自动登录、表单填写、数据抓取。 - 邮件自动化: 自动发送邮件、处理附件。
- gui自动化: 使用
pyautogui模拟鼠标键盘操作,实现与任何桌面应用的交互。 - 定时任务: 使用操作系统自带的定时任务(如windows的任务计划程序,linux的cron)结合python脚本,实现无人值守的自动化。
行动起来!
- 实践是最好的老师: 不要只看不做,选择一两个你最感兴趣或最能解决你实际问题的脚本,亲自修改参数并运行它。
- 从模仿到创造: 在理解了这些脚本的原理后,尝试根据自己的需求进行修改和组合,创造出属于你自己的自动化工具。
- 持续学习: python的世界广阔而精彩,保持好奇心,不断学习新的库和技术。
以上就是python解放双手的15个超实用的自动化办公脚本(附代码)的详细内容,更多关于python自动化办公脚本的资料请关注代码网其它相关文章!
发表评论