极速系列07—利用python将文件夹快速分类

我们有一个文件夹,里面嵌套文件夹+文件,我们想将这些文件分类整理清楚,如何快速分类呢?
思路:读取文件夹中的所有文件,按照我们要分类的标准,制定规则(一定要能找到分类的标准,比如按照年份、文件名、文件类型等等),生成分类后的文件夹,并将相应的文件复制或者移动进去,这样我们的文件就分好了。
先给大家看看效果:

文件夹快速分类

代码:

## 导入库
import os
import shutil
import glob

# 设置建立分类总文件夹的路径,这里按自己的实际路径修改
mkdir_path = r'E:\面授课程自己做的练习\文件夹分类'
# 设置需要遍历整理的文件夹路径,可以依据自己的实际需求修改
goal_dir = r'E:\面授课程自己做的练习\第一层文件'

if not os.path.exists(mkdir_path):
    os.mkdir(mkdir_path)

file_num = 0
dir_num = 0
      
# 循环取出全部文件及文件夹
for file in glob.glob(f'{goal_dir}/**/*', recursive=True):
    # 判断是否是文件
    if os.path.isfile(file):
        
        # 将文件的后缀取出来
        suffix = os.path.splitext(file)[-1][1:]
        
        # 如果不存在,则创建文件夹
        if not os.path.exists(f'{mkdir_path}/{suffix}'):
            os.mkdir(f'{mkdir_path}/{suffix}')
            dir_num += 1
        # 移动拷贝文件
        shutil.copy(file, f'{mkdir_path}/{suffix}')
        file_num += 1
    else:
        pass
    
print(f'整理完成,有{file_num}个文件分类到了{dir_num}个文件夹中')

代码详解:

  • os库可以完成操作系统层面大量操作,例如文件夹的创建、移动、重命名、删除等, 有些功能实现的不是很完美,就用到shutil库跟其互补了,例如文件的复制、移动等
  • os: os 是 python 标准库模块,随 python 一起安装,无需单独安装,可直接导入。
  • glob库可以利用通配符进行文件的搜索获取,非常强大

glob代码详解

#本案例取文件使用的就是glob库
# 取出第一层文件夹里面的全部文件和文件夹
goal_dir = r'E:\面授课程自己做的练习\第一层文件'
glob.glob(f'{goal_dir}/*', recursive=True)

在这里插入图片描述

# 取出第一层文件夹里面的全部文件夹
glob.glob(f'{goal_dir}/*/', recursive=True)

在这里插入图片描述

# 取出第二层文件夹里面的全部文件和文件夹
glob.glob(f'{goal_dir}/*/*', recursive=True)

在这里插入图片描述

# 取出全部文件,包括几个层级以下的文件及文件夹
glob.glob(f'{goal_dir}/**', recursive=True)  # 另外,recursive参数默认false,指的是对pathname制定的那一层扫描得到结果后就返回,如果recursive=True,那么可以用两个星号 ** 遍历制定的路径的所有子目录和子目录里的文件。
print(len(glob.glob(f'{goal_dir}/**', recursive=True)))
# 取出全部文件,包括几个层级以下的文件及文件夹
glob.glob(f'{goal_dir}/**', recursive=False)

在这里插入图片描述

goal_dir = r'E:\面授课程自己做的练习\第一层文件'
# 取出全部文件,包括几个层级以下的文件及文件夹,除去第一层文件夹
glob.glob(f'{goal_dir}/**/*', recursive=True)
# 取出全部文件,包括几个层级以下文件夹
glob.glob(f'{goal_dir}/**/', recursive=True)

在这里插入图片描述

#取出文件夹中全部以docx结尾的文件
glob.glob(f'{goal_dir}/**/*.docx', recursive=True)

在这里插入图片描述

os

import os
import pandas as pd

goal_dir = r'E:\面授课程自己做的练习\第一层文件'

for root, dirs, files in os.walk(goal_dir):
    print("root", root)  # 当前目录路径
    print("dirs", dirs)  # 当前路径下所有子目录
    print("files", files)  # 当前路径下所有非目录子文件
    print('目录路径 ',root)
    for i in dirs:
        print('子目录---', i)
    for j in files:
        print('非目录子文件---', j)
    print(f'{root}------------------结束')

那么如果我们想要将各个文件中的文件夹,根据名字中的“第一层、第二层、第三层…”整理到一张表里,如何做呢?
代码:

import os
import shutil
import glob
import re
goal_dir = r'E:\面授课程自己做的练习\文件夹分类'
make_dir = r'E:\面授课程自己做的练习\分类test'
if not os.path.exists(make_dir):
    os.mkdir(make_dir)
    
all_file = glob.glob(f'{goal_dir}/**',recursive = True)
#按照文件名中的层级划分文件
for i in all_file:
    if os.path.isfile(i):
        son_dir = re.findall('\\第(.*?)层',i)[0]
        if not os.path.exists(make_dir + '\\'+son_dir):
            os.mkdir(make_dir + '\\'+son_dir)
        shutil.copy(i,make_dir + '\\'+son_dir)
    else:
        pass
print('success!!!')

实现效果:
在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值