15个Python自动化办公脚本:文件、表格与PDF高效处理指南

小满
小满
发布时间:2026-10-11| 2人浏览过
原创

本文汇总15个高频Python自动化办公脚本,覆盖文件批量整理、表格数据转换、PDF内容提取及图片格式缩放等场景。提供从环境配置到完整代码的运行方案,替代手动重复操作,帮助职场人员快速提升日常数据处理效率。

环境准备与依赖安装

运行以下脚本需提前配置基础运行环境。Windows用户请在安装Python时勾选 Add Python to PATH,macOS/Linux用户直接使用终端即可。

通过 pip 安装脚本所需的常用库。部分库如 pandas 和 Pillow 是核心依赖,确保已正确安装:

pip install pandas openpyxl PyPDF2 Pillow pyperclip

参数说明:

  • pandas / openpyxl:负责Excel与CSV的读取、清洗与导出。
  • Pillow:处理图像缩放与格式转换。
  • PyPDF2:用于PDF文件的合并与文本解析。
  • pyperclip:跨平台剪贴板读写。

⚠️ 操作风险提示

批量重命名、移动、删除文件或覆盖写入的操作会直接改变磁盘文件结构。请在执行任何脚本前备份目标文件夹,建议先在空目录或仅含测试文件的子目录中验证输出结果,确认无误后再处理重要业务数据。

文件管理与文本处理

第1步:批量替换文件名元素

目的:快速清理文件夹内杂乱的文件名,统一添加前缀或后缀。
参数:设置待处理文件夹路径、旧字符串、新字符串。
动作:遍历目录比对文件名,调用 os.rename 执行替换。

import os

def batch_rename_files(folder_path, old_str, 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"
    batch_rename_files(folder, "IMG_", "Vacation_")

第2步:按扩展名分类归档

目的:自动识别文件类型并移动到指定分类文件夹,保持桌面整洁。
参数:目标根目录路径。
动作:获取扩展名,动态创建分类子目录,使用 shutil.move 转移文件。

import os
import shutil

def organize_files_by_type(folder_path):
    try:
        for filename in os.listdir(folder_path):
            file_path = os.path.join(folder_path, filename)
            if os.path.isfile(file_path):
                ext = os.path.splitext(filename)[1].lower()
                if not ext: continue
                target_folder = os.path.join(folder_path, ext[1:] + "_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__":
    organize_files_by_type("D:/MyDocuments/Downloads")

第3步:递归清理空文件夹

目的:释放被空目录占用的磁盘空间。
参数:扫描的根目录路径。
动作:自底向上遍历 (topdown=False),检测无内容的目录并执行 os.rmdir。

import os

def delete_empty_folders(folder_path):
    deleted_count = 0
    for dirpath, dirnames, filenames in os.walk(folder_path, 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 = "D:/MyDocuments/Temp"
    count = delete_empty_folders(root)
    print(f"共删除 {count} 个空文件夹。")

第4步:多TXT文件合并

目的:将分散的日志或报告片段整合为单一文件,便于归档分析。
参数:源文件夹路径、输出文件名(默认 merged_output.txt)。
动作:依次打开TXT文件追加写入,自动处理UTF-8与GBK编码兼容。

import os

def merge_txt_files(folder_path, output_filename="merged_output.txt"):
    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:
                            content = infile.read()
                    except UnicodeDecodeError:
                        with open(filepath, 'r', encoding='gbk') as infile:
                            content = infile.read()
                    outfile.write(f"--- {filename} ---\n{content}\n\n")
                    print(f"已合并: {filename}")
        print(f"合并完成,输出至: {output_path}")
    except Exception as e:
        print(f"发生错误: {e}")

第5步:全局文本批量替换

目的:快速修正文档中的统一术语、废弃函数名或排版错误。
参数:文件夹路径、查找字符串、替换字符串、文件后缀(如 .py)。

import os

def batch_find_replace(folder_path, old_text, new_text, file_extension=".txt"):
    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:
                    with open(filepath, 'w', encoding='utf-8') as f:
                        f.write(content.replace(old_text, new_text))
                    replaced_count += 1
                    print(f"已替换: {filename}")
            except Exception as e:
                print(f"处理失败 {filename}: {e}")
    print(f"批量替换完成,共修改 {replaced_count} 个文件。")

表格数据自动化处理

第6步:CSV转Excel工作簿

目的:将原始CSV数据清洗合并为标准 .xlsx 格式,方便后续共享与图表制作。
参数:CSV文件夹路径、输出Excel名称。

import pandas as pd
import os

def csv_to_excel(csv_folder_path, output_excel_filename="merged_data.xlsx"):
    all_data = []
    for filename in os.listdir(csv_folder_path):
        if filename.endswith(".csv"):
            filepath = os.path.join(csv_folder_path, filename)
            try:
                df = pd.read_csv(filepath, encoding='utf-8')
                all_data.append(df)
            except UnicodeDecodeError:
                df = pd.read_csv(filepath, encoding='gbk')
                all_data.append(df)
    merged_df = pd.concat(all_data, ignore_index=True)
    merged_df.to_excel(os.path.join(csv_folder_path, output_excel_filename), index=False)
    print("CSV已成功合并并转为Excel。")

第7步:合并多个Excel文件

目的:将各部门报表按月或按项目汇总至一个工作簿的不同Sheet中。
参数:Excel文件夹路径、输出文件名。

import pandas as pd
import os

def merge_excel_files(excel_folder_path, output_excel_filename="combined_reports.xlsx"):
    writer = pd.ExcelWriter(os.path.join(excel_folder_path, output_excel_filename), engine='openpyxl')
    for filename in os.listdir(excel_folder_path):
        if filename.endswith((".xlsx", ".xls")) and filename != output_excel_filename:
            try:
                df = pd.read_excel(os.path.join(excel_folder_path, filename))
                sheet_name = os.path.splitext(filename)[0][:30]
                df.to_excel(writer, sheet_name=sheet_name, index=False)
            except Exception as e:
                print(f"读取失败: {filename}, {e}")
    writer.save()
    print("Excel文件合并完成。")

第8步:按需提取Excel筛选数据

目的:根据业务条件(如销售额阈值、地区限制)抽离子集生成独立报表。
参数:输入Excel路径、输出路径、筛选列名与条件值。

import pandas as pd
import os

def extract_data_from_excel(input_path, output_filename="extracted_data.xlsx"):
    df = pd.read_excel(input_path)
    extracted = df[(df['销售额'] > 5000) & (df['地区'] == '华东')]
    out_path = os.path.join(os.path.dirname(input_path), output_filename)
    extracted.to_excel(out_path, index=False)
    print(f"已提取符合条件的数据并保存至: {out_path}")

图像与PDF文档处理

第9步:批量图片等比例缩放

目的:针对网站配图或缩略图需求,统一调整分辨率以优化加载速度。
参数:图片目录、目标尺寸元组 (宽, 高)。

from PIL import Image
import os

def batch_resize_images(folder_path, size=(800, 600)):
    os.makedirs(os.path.join(folder_path, "resized"), exist_ok=True)
    for fname in os.listdir(folder_path):
        if fname.lower().endswith(('.png','.jpg','.jpeg','.gif','.bmp')):
            with Image.open(os.path.join(folder_path, fname)) as img:
                img.resize(size).save(os.path.join(folder_path, "resized", fname))
    print("图片缩放完成。")

第10步:批量转换图片格式

目的:解决跨平台兼容性或减小文件体积,如 PNG 转 JPEG。
参数:源目录、目标格式字符串(如 "JPEG")。

from PIL import Image
import os

def batch_convert_images(folder_path, target_format="PNG"):
    out_dir = os.path.join(folder_path, "converted")
    os.makedirs(out_dir, exist_ok=True)
    for fname in os.listdir(folder_path):
        if not fname.lower().endswith(f'.{target_format.lower()}'):
            with Image.open(os.path.join(folder_path, fname)) as img:
                base = os.path.splitext(fname)[0]
                img.save(os.path.join(out_dir, f"{base}.{target_format.lower()}"), format=target_format)
    print(f"已转换格式为: {target_format}")

第14步:多PDF文件合并

目的:将拆分的项目书、合同扫描件拼接为完整文档。
参数:PDF文件夹路径、输出文件名。

from PyPDF2 import PdfMerger
import os

def merge_pdf_files(folder_path, output_filename="merged.pdf"):
    merger = PdfMerger()
    for f in sorted(os.listdir(folder_path)):
        if f.lower().endswith('.pdf'):
            merger.append(os.path.join(folder_path, f))
    with open(os.path.join(folder_path, output_filename), "wb") as outf:
        merger.write(outf)
    merger.close()
    print(f"PDF合并完成: {output_filename}")

第15步:PDF纯文本内容抓取

目的:解除PDF排版限制,提取可编辑文本用于检索或数据分析。
参数:单个或多个PDF路径列表。

from PyPDF2 import PdfReader
import os

def extract_pdf_text(pdf_path, output_txt=None):
    if not output_txt: output_txt = os.path.splitext(pdf_path)[0] + "_text.txt"
    text_content = ""
    with open(pdf_path, "rb") as f:
        for page in PdfReader(f).pages:
            text_content += page.extract_text() + "\n"
    with open(output_txt, "w", encoding="utf-8") as out:
        out.write(text_content)
    print(f"文本已提取至: {output_txt}")

系统辅助与定时任务

第11步:一键批量启动网页

目的:减少早晨开工或查阅资料时的重复点击操作。
参数:包含URL地址的列表。

import webbrowser
import time

def open_websites(urls):
    for url in urls:
        webbrowser.open_new_tab(url)
        time.sleep(1)
    print("已批量打开指定网页。")

# 调用示例: open_websites(["https://www.google.com", "https://github.com"])

第12步:定时屏幕/控制台提醒

目的:防止久坐疲劳或错过会议截止点。
参数:等待分钟数、提醒文案。

import time

def set_timer_reminder(minutes, message):
    seconds = minutes * 60
    time.sleep(seconds)
    print(f"\n{'='*30}\n提醒: {message}\n{'='*30}\n")

set_timer_reminder(45, "该喝水休息了!")

第13步:剪贴板自动读写

目的:实现表单批量填充或日志快速复制,免去鼠标选中拖拽。
参数:传入待粘贴的字符串。

import pyperclip

def clipboard_ops():
    text = "自动化办公脚本已就绪"
    pyperclip.copy(text)
    print(f"已写入剪贴板: {pyperclip.paste()}")

clipboard_ops()

常见问题排查

ModuleNotFoundError(模块缺失):检查是否漏装依赖。使用 pip install 库名 补全后重启IDE。
FileNotFoundError / PermissionError(路径或权限错误):Windows绝对路径建议使用正斜杠(如 C:/Data/)或原始字符串 r'C:\Data\'。避免在受保护的系统目录(如 C:\Windows)直接运行读写脚本。
UnicodeDecodeError(编码报错):中文文档常使用 GBK 编码。在 open() 或 pd.read_csv() 中显式指定 encoding='gbk' 即可解决。
文件占用无法移动/删除:关闭Excel、Word或图片查看器中打开的目标文件,释放句柄后重试。

总结

以上15个Python自动化办公脚本覆盖了文件整理、表格处理、图文转换及系统辅助四大核心办公场景。通过组合使用 pandas、Pillow、PyPDF2 等成熟生态库,配合基础的操作系统接口,能够快速替代繁琐的手动核对与格式转换工作。建议根据实际业务频率选择高频痛点脚本进行参数调优,并可结合操作系统自带的定时计划任务(Windows任务计划程序或Linux Cron)实现无人值守的夜间批处理。以上就是Python自动化办公脚本大全:文件表格PDF高效处理指南的详细内容,更多关于Python提效工具的实用技巧与代码实例请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。