赞
踩
我们有一个文件夹,里面嵌套文件夹+文件,我们想将这些文件分类整理清楚,如何快速分类呢?
思路:读取文件夹中的所有文件,按照我们要分类的标准,制定规则(一定要能找到分类的标准,比如按照年份、文件名、文件类型等等),生成分类后的文件夹,并将相应的文件复制或者移动进去,这样我们的文件就分好了。
先给大家看看效果:
文件夹快速分类
代码:
## 导入库 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}个文件夹中')
代码详解:
#本案例取文件使用的就是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)
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!!!')
实现效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。