【文件整理工具】Python 代码整理我们电脑中的文件,So easy!

一、前言

最近手机存储空间不够使了,打开设置发现照片占了7~8G,于是就想着将照片备份到电脑上;

将手机连接到电脑上的那一刻,打开DCIM文件夹一看,里面好多如下图的文件夹;
在这里插入图片描述
但是我想把这些文件夹里面的 照片、视频 等文件全部保存到一个文件夹,怎么快速简单的实现呢?

下面我们一起来看一下,怎么用 Python 代码来处理这些文件!!!

好文章 记得收藏+点赞+关注额 !!!

---- Nick.Peng


二、Python实现快速整理文件

  • 直接上代码,步骤就不一一解释了,有注释,自己看。。。

  • 实现代码如下:

    # -*- coding: utf-8 -*-
    # @Author: Nick
    # @Date:   2019-12-26 14:38:43
    # @Last Modified by:   Nick
    # @Last Modified time: 2019-12-26 14:42:22
    # @usagePrecise: 遍历指定目录的下级目录,并查找指定类型文件,复制到上层指定文件夹内
    import shutil
    import os
    import re
    
    
    def get_file_type(path, sort_folder_name):
        """
        获取所有文件类型
        :param path:
        :param sort_folder_name:
        :return: tuple  ==>  ('.JPG', '.jpg', '.MOV', '.mp4', '.PNG', '.AAE')
        """
        # 查看当前path路径下所有的文件和文件夹(排除整理后的文件夹)
        all_folder_list = [i for i in os.listdir(path) if not i == sort_folder_name]
        file_type_list = []
        for folder in all_folder_list:
            if not os.path.isdir(folder):
                continue
            folder_path = os.path.join(path, folder)
            all_file_list = os.listdir(folder_path)
            for i in all_file_list:
                file_type = re.findall(r"\..*", i)[0] if re.findall(r"\..*", i) else file_type_list[0]
                if file_type not in file_type_list:
                    file_type_list.append(file_type)
    
        return tuple(file_type_list)
    
    
    def sort_dir(path, file_type, sort_folder_name):
        """
        整理file_type的所有文件到指定目录sort_folder_name
        :param path: 路径
        :param file_type: 需要整理的文件类型(.JPG或.MOV等)
        :return: None
        """
        sort_folder_path = os.path.join(path, sort_folder_name)
        # 如果目录不存在, 就新建
        if not os.path.exists(sort_folder_path):
            os.makedirs(sort_folder_path)
    
        # 查看当前path路径下所有的文件和文件夹(排除整理后的文件夹)
        all_folder_list = [i for i in os.listdir(path) if not i == sort_folder_name]
        file_count = 0
        jump_file = []
        for folder in all_folder_list:
            # 过滤文件,只处理文件夹
            if not os.path.isdir(folder):
                continue
            print('\n', "======正在整理的文件夹:{}======".format(folder))
            # 拼接待整理目录完整路径
            folder_path = os.path.join(path, folder)
            # 返回待整理路径下所有的文件的名字,文件夹除外
            all_file_list = [i for i in os.listdir(folder_path) if not os.path.isdir(i)]
            for file in all_file_list:
                file_path = os.path.join(folder_path, file)
                # 整理指定后缀的文件
                if file_path.endswith(file_type):
                    # 如果文件在sort_folder里已存在,跳过
                    if os.path.exists(os.path.join(path, sort_folder_name, file)):
                        print('\n', "文件:{} 已存在......跳过......".format(file))
                        jump_file.append(file)
                    else:
                        file_count += 1
                        print('正在复制第 {} 个文件:{}'.format(file_count, file_path))
                        # 复制file_path找到所有符合条件的文件到sort_folder_name目录
                        shutil.copy(file_path, sort_folder_name)
        if jump_file:
            print('\n', "********** 跳过文件明细如下:\n{}".format(jump_file))
    
        print('\n', "********** 整理完毕,此次共整理 {} 个文件,跳过 {} 个文件 **********".format(file_count, len(jump_file)))
    
    
    if __name__ == '__main__':
        # 待整理文件夹的父目录路径
        sort_path = 'F:\\相册\\2019.12.25'
        # 整理后的文件夹名字
        sort_folder_name = "sort_folder"
        file_type_list = get_file_type(sort_path, sort_folder_name)
        sort_dir(sort_path, file_type_list, sort_folder_name)
    
    
  • 整理完成后,打印整理结果:

     ======正在整理的文件夹:101APPLE======
     ............
     ............
     
     ********** 跳过文件明细如下:
     [xxxxxx.JPG]
    
     ********** 整理完毕,此次共整理 668 个文件,跳过 1 个文件 **********
     
    

好文章 记得收藏+点赞+关注额 !!!

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值