python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python整理文件

使用Python进行一键整理文件,自动分类DOCX与PDF

作者:IT小本本

这篇文章主要为大家详细介绍了如何使用Python进行一键整理文件,可以自动分类DOCX与PDF,文中的示例代码讲解详细,有需要的小伙伴可以了解下

你是否经常面对这样的场景:下载的文档、工作报告、学习资料混在一个文件夹里,DOCX和PDF文件杂乱无章,想找一个文件需要翻半天?手动新建文件夹、逐个移动文件不仅浪费时间,还容易遗漏或误操作。

今天,我们将实现一个零依赖的Python自动化脚本——只需指定目标文件夹,它就能自动识别DOCX和PDF文件,分别移动到专属子文件夹中,还能实时反馈移动进度、统计文件数量,并处理异常情况(如文件被占用)。即使是Python新手,也能3分钟上手!

一、环境准备:零依赖,开箱即用

这个脚本的核心优势之一是无需安装任何第三方库,完全基于Python标准库开发,兼容性极强。只要你的电脑安装了Python(3.4及以上版本),就能直接运行。

1. 核心依赖库(均为Python标准库)

脚本中用到的3个库均随Python默认安装,无需额外执行pip install

2. Python版本要求

推荐使用Python 3.6及以上版本(Path.glob方法在3.4+已支持,但高版本在异常处理和编码兼容性上更优)。

3. 跨平台支持

脚本可在Windows、macOS、Linux系统上直接运行,仅需修改“源目录路径”(如Windows的D:\data、macOS的/Users/xxx/Documents),无需调整代码逻辑。

二、完整源代码以及解析

先看完整可运行代码,再分模块拆解核心逻辑,帮你吃透每一步的设计思路:

import os
import shutil
from pathlib import Path

def organize_files(source_dir):
    # 转换为Path对象
    source_path = Path(source_dir)
    
    # 创建目标文件夹
    docx_folder = source_path / "docx"
    pdf_folder = source_path / "pdf"
    
    # 确保目标文件夹存在
    docx_folder.mkdir(exist_ok=True)
    pdf_folder.mkdir(exist_ok=True)
    
    # 计数器
    docx_count = 0
    pdf_count = 0
    
    # 获取源目录中的所有文件
    for file_path in source_path.glob("*"):
        # 跳过文件夹
        if file_path.is_dir():
            continue
            
        # 处理.docx文件
        if file_path.suffix.lower() == ".docx":
            target_path = docx_folder / file_path.name
            try:
                shutil.move(str(file_path), str(target_path))
                docx_count += 1
                print(f"已移动: {file_path.name} -> docx文件夹")
            except Exception as e:
                print(f"移动 {file_path.name} 失败: {str(e)}")
        
        # 处理.pdf文件
        elif file_path.suffix.lower() == ".pdf":
            target_path = pdf_folder / file_path.name
            try:
                shutil.move(str(file_path), str(target_path))
                pdf_count += 1
                print(f"已移动: {file_path.name} -> pdf文件夹")
            except Exception as e:
                print(f"移动 {file_path.name} 失败: {str(e)}")
    
    print(f"\n整理完成!")
    print(f"已移动 {docx_count} 个DOCX文件到 {docx_folder}")
    print(f"已移动 {pdf_count} 个PDF文件到 {pdf_folder}")

if __name__ == "__main__":
    # 源目录
    source_directory = r"D:\data"
    organize_files(source_directory)

1. 核心函数:organize_files(source_dir)

这个函数是脚本的“心脏”,负责从“路径处理”到“文件移动”的全流程,我们分10个关键步骤拆解:

步骤1:路径对象化(source_path = Path(source_dir))

步骤2-3:创建目标子文件夹

docx_folder = source_path / "docx"
pdf_folder.mkdir(exist_ok=True)

步骤4:初始化计数器

docx_countpdf_count用于统计移动成功的文件数量,最终在控制台打印,让用户直观知道整理效果(比如“移动了5个DOCX、3个PDF”)。

步骤5:遍历源目录文件(source_path.glob("*"))

步骤6-7:按文件类型移动(核心逻辑)

这是脚本的核心功能,以DOCX文件为例:

步骤8:打印统计结果

整理完成后,清晰显示“移动了多少个文件”“移动到哪个路径”,避免用户“不知道有没有整理成功”的困惑。

2. 主程序入口(if __name__ == "__main__":)

定义“源目录”(source_directory):这是用户唯一需要修改的地方,需填写你要整理的文件夹路径。

调用organize_files(source_directory):执行文件整理逻辑。

三、实战使用:3步完成文件整理

掌握代码逻辑后,我们以Windows系统为例,实际运行脚本,感受“一键整理”的便捷:

步骤1:修改“源目录”路径

打开脚本,找到source_directory = r"D:\data",将路径改为你要整理的文件夹,比如:

source_directory = r"C:\Users\你的用户名\Desktop\杂乱文件"

提示:如果不知道文件夹路径,可以打开文件夹,在地址栏复制路径,直接粘贴到脚本中(Windows路径记得加r前缀)。

步骤2:运行脚本

打开“命令提示符”(Win+R,输入cmd回车)。

运行脚本(假设脚本名为file_organizer.py):

python file_organizer.py

步骤3:查看整理结果

运行后会看到类似以下的输出:

已移动: 项目方案.docx -> docx文件夹
已移动: 会议记录.DOCX -> docx文件夹(注意:大写后缀也能识别)
已移动: 产品手册.pdf -> pdf文件夹
移动 财务报表.pdf 失败: [WinError 32] 另一个程序正在使用此文件,进程无法访问。
已移动: 需求文档.docx -> docx文件夹

整理完成!
已移动 3 个DOCX文件到 C:\Users\你的用户名\Desktop\杂乱文件\docx
已移动 1 个PDF文件到 C:\Users\你的用户名\Desktop\杂乱文件\pdf

四、常见问题与解决方案

在使用过程中,可能会遇到一些小问题,这里整理了高频场景及解决方法,帮你快速排查:

问题现象可能原因解决方案
脚本提示“移动失败:另一个程序正在使用此文件”目标文件被Word、Adobe Reader等程序打开关闭对应的程序(如关闭Word窗口、PDF阅读器),重新运行脚本
脚本提示“PermissionError:权限不足”源目录或目标文件夹无写入权限(如系统目录、管理员创建的文件夹)1. 右键点击“命令提示符”,选择“以管理员身份运行”;
2. 或把文件移动到非系统目录(如桌面、Documents)
脚本没移动任何文件,但源目录有DOCX/PDF1. 源目录路径写错(如D:\data写成D:data);
2. 文件后缀是.doc(非.docx)或.PDF(脚本已处理小写,此情况较少)
1. 核对source_directory路径,确保与文件夹地址栏一致;
2. 若为.doc文件,可手动转为.docx,或扩展脚本支持.doc
脚本报错“FileNotFoundError:[WinError 3] 系统找不到指定的路径”源目录不存在(如D:\data文件夹未创建)先在对应路径创建文件夹(如手动新建D:\data),再运行脚本

五、进阶扩展:让脚本更强大

基础脚本已能满足“分类DOCX/PDF”的需求,但我们还可以根据实际场景扩展功能,让它适配更多使用场景:

1. 支持更多文件类型(如TXT、JPG)

如果想同时整理TXT文档和JPG图片,只需添加对应的目标文件夹和判断逻辑:

# 新增目标文件夹
txt_folder = source_path / "txt"
jpg_folder = source_path / "jpg"
# 确保文件夹存在
txt_folder.mkdir(exist_ok=True)
jpg_folder.mkdir(exist_ok=True)
# 新增计数器
txt_count = 0
jpg_count = 0

# 新增TXT文件处理逻辑
elif file_path.suffix.lower() == ".txt":
    target_path = txt_folder / file_path.name
    try:
        shutil.move(str(file_path), str(target_path))
        txt_count += 1
        print(f"已移动: {file_path.name} -> txt文件夹")
    except Exception as e:
        print(f"移动 {file_path.name} 失败: {str(e)}")

# 新增JPG文件处理逻辑(同理可添加.png、.gif等)
elif file_path.suffix.lower() in [".jpg", ".jpeg"]:
    target_path = jpg_folder / file_path.name
    try:
        shutil.move(str(file_path), str(target_path))
        jpg_count += 1
        print(f"已移动: {file_path.name} -> jpg文件夹")
    except Exception as e:
        print(f"移动 {file_path.name} 失败: {str(e)}")

# 最后更新统计结果
print(f"已移动 {txt_count} 个TXT文件到 {txt_folder}")
print(f"已移动 {jpg_count} 个JPG文件到 {jpg_folder}")

2. 处理子文件夹中的文件(递归整理)

默认脚本只处理“源目录一级目录”的文件,若想整理源目录下所有子文件夹中的DOCX/PDF,只需修改glob参数为**/*(递归匹配所有文件):

# 原代码:只处理一级目录
# for file_path in source_path.glob("*"):
# 修改后:递归处理所有子文件夹中的文件
for file_path in source_path.glob("**/*"):

注意:递归整理时,仍会跳过子文件夹(if file_path.is_dir(): continue),只移动文件。

3. 避免同名文件覆盖

如果目标文件夹中已有同名文件(如docx文件夹已存在“报告.docx”),shutil.move会直接覆盖旧文件。若想避免覆盖,可在移动前判断目标路径是否存在,若存在则重命名(如“报告_1.docx”):

# 以DOCX文件为例,修改目标路径逻辑
if file_path.suffix.lower() == ".docx":
    target_path = docx_folder / file_path.name
    # 若目标路径已存在,添加序号(如“报告_1.docx”)
    count = 1
    while target_path.exists():
        # 分离文件名和后缀:如“报告.docx” -> “报告”和“.docx”
        name = file_path.stem
        suffix = file_path.suffix
        # 重命名目标路径:报告_1.docx、报告_2.docx...
        target_path = docx_folder / f"{name}_{count}{suffix}"
        count += 1
    # 后续移动逻辑不变...

自动化的本质是“把重复工作交给代码”——这个脚本虽然简单,但能帮你节省大量手动整理文件的时间,尤其适合经常处理文档的职场人、学生。如果你的工作中需要整理其他类型的文件(如表格、图片),也可以基于本文的扩展思路,修改脚本适配更多场景。

到此这篇关于使用Python进行一键整理文件,自动分类DOCX与PDF的文章就介绍到这了,更多相关Python整理文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文