使用Python脚本轻松整理大量文件:按数量自动分类归档 @ bobo | 星期三,三月 27 日,2024 年 | 4 分钟阅读 | 更新于 星期三,三月 27 日,2024 年

你是否曾经面对过需要整理成千上万个文件的情况?手动创建文件夹、一个个移动文件不仅耗时,还容易出错。今天,我将向你介绍一个强大的Python脚本,它能自动将大量文件按照指定数量(默认1000个)分类到不同文件夹中,让文件管理变得轻松高效。

为什么需要这个脚本?

在日常工作和生活中,我们经常会遇到以下场景:

  • 需要整理数千张手机拍摄的照片
  • 要管理大量下载的文档和资料
  • 要归档积累多年的工作文件

手动处理这些文件不仅费时费力,还容易造成文件丢失或分类错误。使用自动化脚本可以:

  • 节省大量时间和精力
  • 保证分类的准确性
  • 维持文件组织的一致性
  • 减少人为操作错误

脚本实现

下面是完整的Python脚本代码:

import os
import shutil
from pathlib import Path

def sort_images(source_dir, batch_size=1000):
    # 获取源目录的Path对象
    source_path = Path(source_dir)
    
    # 获取所有图片文件
    image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp')
    image_files = [f for f in source_path.glob('*') if f.suffix.lower() in image_extensions]
    
    # 计算需要创建的文件夹数量
    total_images = len(image_files)
    num_folders = (total_images + batch_size - 1) // batch_size
    
    print(f'处理文件夹:{source_dir}')
    print(f'找到 {total_images} 张图片,将分成 {num_folders} 个文件夹')
    
    # 创建文件夹并移动文件
    for i in range(num_folders):
        # 创建新文件夹
        folder_name = f'{i*batch_size+1}-{min((i+1)*batch_size, total_images)}'
        new_folder = source_path.parent / f'{source_path.name}_{folder_name}'
        new_folder.mkdir(exist_ok=True)
        
        # 移动这一批次的文件
        start_idx = i * batch_size
        end_idx = min((i + 1) * batch_size, total_images)
        
        for image_file in image_files[start_idx:end_idx]:
            shutil.move(str(image_file), str(new_folder / image_file.name))
            
        print(f'已完成文件夹 {folder_name} 的处理,包含 {end_idx-start_idx} 张图片')
    
    print('处理完成!\n')

if __name__ == '__main__':
    # 需要处理的文件夹列表
    folders_to_process = [
        r'D:\需要整理的文件夹1',
        r'D:\需要整理的文件夹2'
    ]
    
    # 依次处理每个文件夹
    for folder in folders_to_process:
        sort_images(folder)

核心功能解析

1. 智能文件识别

  • 默认支持主流图片格式:jpg、jpeg、png、gif、bmp、webp
  • 通过修改image_extensions变量轻松扩展支持的文件类型
  • 自动过滤非目标文件,确保分类准确性

2. 灵活的分组策略

  • 默认每1000个文件一个分组
  • 通过batch_size参数自定义分组大小
  • 自动处理文件数量不足一组的情况

3. 清晰的命名规则

  • 新文件夹命名:原文件夹名_起始序号-结束序号
  • 示例:照片集_1-1000照片集_1001-2000
  • 保持原文件名,方便查找和识别

4. 实时进度反馈

  • 显示发现的文件总数
  • 计算需要创建的文件夹数量
  • 实时显示每个文件夹的处理状态
  • 提供每个文件夹的实际文件数量

使用指南

1. 环境准备

  1. 确保已安装Python 3.6或更高版本
  2. 将脚本保存为sort_files.py
  3. 确认Python环境中包含所需的标准库

2. 配置脚本

  1. 打开脚本文件
  2. folders_to_process列表中添加需要处理的文件夹路径
  3. 根据需要调整batch_size参数

3. 执行脚本

  1. 打开命令提示符或PowerShell
  2. 进入脚本所在目录
  3. 运行命令:python sort_files.py
  4. 等待处理完成

实际应用示例

假设你有一个文件夹D:\我的照片,包含2345张照片,运行脚本后:

  1. 自动创建三个分类文件夹:

    • 我的照片_1-1000:存放前1000张照片
    • 我的照片_1001-2000:存放接下来的1000张照片
    • 我的照片_2001-2345:存放剩余的345张照片
  2. 所有照片都会被自动移动到对应的文件夹中,保持原有的文件名不变

安全提示

在使用脚本之前,请注意以下事项:

  1. 备份重要文件:脚本执行移动操作,建议先备份重要文件
  2. 检查存储空间:确保目标位置有足够的存储空间
  3. 验证权限:确认对目标文件夹有读写权限
  4. 测试小批量:首次使用时建议先用少量文件测试

扩展与优化

1. 支持更多文件类型

# 添加更多文件类型支持
file_extensions = ('.jpg', '.pdf', '.doc', '.txt', '.zip')

2. 自定义分组大小

# 调整每组文件数量
sort_images(source_dir, batch_size=500)  # 每500个文件一组

3. 添加文件筛选

# 按文件大小筛选
if image_file.stat().st_size > 1024 * 1024:  # 仅处理大于1MB的文件

总结

这个Python脚本为文件管理提供了一个高效的自动化解决方案。它不仅能节省大量时间,还能确保文件整理的准确性和一致性。无论是整理照片、文档还是其他类型的文件,这个脚本都能帮你轻松完成任务。

如果你对脚本有任何改进建议或遇到使用问题,欢迎在评论区留言交流!

avatar

BoBo`s Blog每天进步一点点,能多一点是一点

基本信息
  • 姓名:bobo
  • 花名:胡巴
  • 性别:男
  • 血型:O型
  • 星座:白羊座

联系方式

  • 所在地:上海
  • QQ:279250819
  • 微信号:wanghuiwoshinideyou
  • 电子邮件:279250819@qq.com

博客地址

公众号

alt 无限递归

工作经历
  • 2022.5 - 至今

    • 公司:乐府互娱
    • 职位:高级SDK工程师
  • 2019.6 - 2022.4

    • 公司:萌推(上海突进网络科技有限公司)
    • 职位:中级PHP工程师 & 初级golang工程师
    • 荣誉:
      • 绩效A连续得主
      • 月度之星
      • 优秀个人奖
    • 所作所为:
      • 利用ES优化OMS、MMS管理系统商品列表查询
      • 利用消息队列、Redis、乐观锁优化商品审核流程
      • 利用Redis对商家端接口进行有效限流
      • 优化商品相关表索引,提升SQL查询速度
      • 商品中台构建,统一商品相关操作
      • 大表优化(数据分离、分表、大字段拆分)
      • 掌握所有商品核心流程
  • 2018.5 - 2019.5

    • 公司:DaDa英语(上海卓赞教育信息科技有限公司)
    • 职位:中级PHP开发工程师
    • 荣誉:无
    • 所作所为:
      • 利用ES优化教师CMS系统统计数据接口至500ms内
      • 工单系统开发及持续优化
      • 教师CMS系统的功能开发及持续优化
  • 2018.3 - 2018.5

    • 公司:波奇(上海)信息科技有限公司
    • 职位:初级PHP开发工程师
    • 荣誉:同下
    • 所做作为:如下
  • 2016.7 - 2018.3

    • 公司:光橙(上海)信息科技有限公司
    • 职位:初级PHP开发工程师
    • 荣誉:
      • 年度最佳进步奖
    • 所作所为:
      • 利用Redis提升商详接口最佳响应速度至50ms内
      • 利用Redis提升双11活动页可承受QPS至500以上
      • 利用Redis对接口进行简单限流
      • 与小伙伴合作提升搜索质量(ES初识)
      • 其他C端接口的开发及优化
      • B端商城老页面的维护及优化
SKILLS

编程语言

  • PHP
  • Golang
  • Shell
  • JAVA
  • JS
  • HTML\CSS

数据库

  • MySQL
  • Redis
  • Clickhouse

消息中间件

  • RabbitMq
  • Kafka

文档撰写

  • Swagger
  • Markdown

技术框架

  • Laravel
  • gin

搜索引擎

  • ElasticSearch

抓包工具

  • Charles