当前位置:   article > 正文

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

用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}个文件夹中')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

代码详解:

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

glob代码详解

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

  • 1
  • 2
  • 3

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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}------------------结束')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

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!!!')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/625894
推荐阅读
相关标签
  

闽ICP备14008679号