【文件整理工具】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 个文件 **********
     
    

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

发布了150 篇原创文章 · 获赞 371 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/PY0312/article/details/103715268