使用Python批量整理文件的三种常见场景与处理方法

 更新时间:2026年06月22日 08:59:29   作者:detayun  
下载文件夹乱成一团、桌面堆满截图、照片按日期散落各处,这些场景你一定不陌生,所以本文提供三种实用场景的Python代码解决方案:按文件类型自动分类、按日期整理照片、批量重命名文件,直接运行、省时省力,需要的朋友可以参考下

为什么你需要批量整理文件?

下载文件夹乱成一团、桌面堆满截图、照片按日期散落各处……这些场景你一定不陌生。

手动整理耗时耗力,而Python几行代码就能搞定。今天这篇博客,我会从最常见的3个场景出发,给你可直接运行的代码,拿来就能用。

场景一:按文件类型自动分类

这是最实用的场景。把"下载"文件夹里的文件,按后缀名自动分到对应文件夹。

import os
import shutil

def sort_by_extension(target_dir):
    # 文件类型与文件夹的映射
    type_map = {
        '图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'],
        '文档': ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.txt'],
        '视频': ['.mp4', '.avi', '.mkv', '.mov', '.wmv'],
        '音频': ['.mp3', '.wav', '.flac', '.aac'],
        '压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz'],
        '代码': ['.py', '.js', '.html', '.css', '.java', '.c']
    }

    for filename in os.listdir(target_dir):
        file_path = os.path.join(target_dir, filename)
        
        if not os.path.isfile(file_path):
            continue
        
        ext = os.path.splitext(filename)[1].lower()
        moved = False
        
        for folder, extensions in type_map.items():
            if ext in extensions:
                folder_path = os.path.join(target_dir, folder)
                os.makedirs(folder_path, exist_ok=True)
                shutil.move(file_path, os.path.join(folder_path, filename))
                moved = True
                break
        
        if not moved:
            other_path = os.path.join(target_dir, '其他')
            os.makedirs(other_path, exist_ok=True)
            shutil.move(file_path, os.path.join(other_path, filename))

# 使用
sort_by_extension(r'C:\Users\你的用户名\Downloads')

运行前注意: 把路径换成你自己的文件夹路径。建议先在测试文件夹上跑一遍。

场景二:按日期整理照片/文件

照片按拍摄日期分类,是另一个高频需求。

import os
import shutil
from datetime import datetime

def sort_by_date(target_dir, date_from='exif'):
    for filename in os.listdir(target_dir):
        file_path = os.path.join(target_dir, filename)
        
        if not os.path.isfile(file_path):
            continue
        
        # 方式1:从文件名提取日期(如 2026-06-20_photo.jpg)
        try:
            date_str = filename.split('_')[0]  # 2026-06-20
            date_obj = datetime.strptime(date_str, '%Y-%m-%d')
        except:
            # 方式2:从文件修改时间获取
            date_obj = datetime.fromtimestamp(os.path.getmtime(file_path))
        
        folder_name = date_obj.strftime('%Y-%m')  # 2026-06
        folder_path = os.path.join(target_dir, folder_name)
        os.makedirs(folder_path, exist_ok=True)
        
        shutil.move(file_path, os.path.join(folder_path, filename))

# 使用
sort_by_date(r'D:\照片')

提示: 如果你的照片有EXIF信息(拍摄日期),可以用 piexif 或 Pillow 库读取真实拍摄时间,比文件名更准确。

场景三:批量重命名

文件名乱七八糟?统一格式一键搞定。

import os

def batch_rename(target_dir, prefix='文件', start=1):
    files = [f for f in os.listdir(target_dir) if os.path.isfile(os.path.join(target_dir, f))]
    
    for i, filename in enumerate(files, start=start):
        ext = os.path.splitext(filename)[1]
        new_name = f"{prefix}_{i:03d}{ext}"  # 文件_001.jpg
        old_path = os.path.join(target_dir, filename)
        new_path = os.path.join(target_dir, new_name)
        os.rename(old_path, new_path)
        print(f"{filename} → {new_name}")

# 使用
batch_rename(r'C:\Users\你的用户名\Desktop\截图', prefix='截图', start=1)

输出示例:

screenshot_abc.png → 截图_001.png
屏幕快照 2026-06-20.png → 截图_002.png

几个实用建议

建议说明
先备份再操作批量操作不可逆,建议先复制一份原文件
用 os.makedirs(exist_ok=True)避免文件夹已存在时报错
shutil.move 比 os.rename 更安全跨磁盘移动时 os.rename 会失败
加 try/except 包装实际文件中可能有特殊字符或权限问题

最后

批量整理文件的核心逻辑就三步:

  1. 遍历文件夹中的文件
  2. 判断分类规则(类型/日期/名称)
  3. 移动或重命名到目标位置

上面的代码可以直接复制使用,根据自己的需求改一下路径和规则就行。

如果你的需求更复杂(比如按文件大小分类、重复文件检测),可以在评论区说,我帮你写。

到此这篇关于使用Python批量整理文件的三种常见场景与处理方法的文章就介绍到这了,更多相关Python批量整理文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python如何设置Excel单元格边框

    Python如何设置Excel单元格边框

    在数据驱动的业务场景中,自动化设置Excel单元格边框成为提升数据处理效率的关键环节,下面我们就来讲讲如何使用Python设置Excel工作簿中单元格的边框吧
    2025-04-04
  • Python搭建NLP模型的详细步骤

    Python搭建NLP模型的详细步骤

    文章提供了一套从零到一实现中文情感分析模型微调的完整教程,使用HuggingFaceTransformers库,推荐pipeline零代码快速上手,然后进行模型的完整微调和部署,需要的朋友可以参考下
    2026-02-02
  • Python入门教程(三十三)Python的字符串格式化

    Python入门教程(三十三)Python的字符串格式化

    这篇文章主要介绍了Python入门教程(三十三)Python的字符串格式化,为了确保字符串按预期显示,我们可以使用 format()方法对结果进行格式化,需要的朋友可以参考下
    2023-05-05
  • python套接字socket通信

    python套接字socket通信

    这篇文章主要介绍了python套接字socket通信,python标准库中内置了底层网络接口socket,以下代码均默认from socket import *,下文很多详细内容需要的小伙伴可以参考一下
    2022-04-04
  • 用django-allauth实现第三方登录的示例代码

    用django-allauth实现第三方登录的示例代码

    这篇文章主要介绍了用django-allauth实现第三方登录的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Python Pivot table透视表使用方法解析

    Python Pivot table透视表使用方法解析

    这篇文章主要介绍了Python Pivot table透视表使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • python实现识别相似图片小结

    python实现识别相似图片小结

    本文给大家分享的是使用Python实现图片相似度识别的总结,代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的。
    2016-02-02
  • django2笔记之路由path语法的实现

    django2笔记之路由path语法的实现

    这篇文章主要介绍了django2笔记之路由path语法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python计算三维矢量幅度的方法

    Python计算三维矢量幅度的方法

    这篇文章主要介绍了Python计算三维矢量幅度的方法,涉及Python矢量运算的相关技巧,需要的朋友可以参考下
    2015-06-06
  • Python使用subprocess模块检测Linux用户是否存在

    Python使用subprocess模块检测Linux用户是否存在

    本文介绍了使用Python的subprocess模块检测和创建Unix系统用户的方法,通过调用id命令判断用户是否存在,若不存在则使用adduser命令创建用户,适用于Ubuntu/Debian系统,感兴趣的小伙伴可以了解下
    2026-01-01

最新评论